解非线性方程组

embedded/2024/11/14 15:02:47/

实验类型:●验证性实验  ○综合性实验  ○设计性实验

实验目的:进一步熟练掌握解非线性方程组牛顿迭代算法,提高编程能力和解算非线性方程组问题的实践技能。

实验内容:

设有非线性方程组(此方程组是非标准型)

实验说明:要求先严格按照牛顿迭代法解非线性方程组的算法步骤(参照课堂课件PPT)手工计算非线性方程组的解—手工迭代计算前三步,把计算及循环结束判定等详细过程写在A4规格的打印纸上;画出牛顿迭代法解非线性方程组的算法程序设计流程图;编写程序并用计算机计算、输出中间结果和最终结果,列表比较计算机计算中间结果(前三个近似解向量)与手工计算(前三个近似解向量)是否一致。列表对比后,给出比较后的验证结论。

实验步骤

  1. 要求上机实验前严格按照牛顿迭代法解非线性方程组的算法步骤(参照课堂PPT)对于非线性方程组标准化成F(P)=(f1(P),  f2(P))T=(f1(x1, x2),  f2(x1, x2))T=(x1,x2) T =0手工迭代计算三步(可使用计算器),并把计算过程及其循环结束判定过程步骤详细写在A4上。
  1. ) T =0手工迭代计算三步(可使用计算器),并把计算过程及其循环结束判定过程步骤详细写在A4上。
  2. 对手工计算做进一步的总结梳理,然后画出牛顿迭代法解非线性方程组的算法程序设计流程图流程图必须符合流程图的图符规范。应用Matlab语言在纸上编写出牛顿迭代法解非线性方程组算法的函数程序代码
  3. 编辑录入函数程序
  4. 输入数据(截图),调试程序并记录调试过程中出现的问题(截图)及修改程序的过程(截图),把你的截图及时粘贴在Word文档中,并对截图配上必要的文字说明,以便证明和描述你的实验过程真实可靠。
  5. 经反复调试后,运行程序并验证程序运行的前三步中间结果和手工计算的前三步中间结果是否一致,要求通过列表对比分析和论证程序运行的前三步中间结果和手工计算的前三步中间结果是否一致若不一致,必须找到不一致的原因,并预以纠正,最后明确给出对比分析结论 。
  6. 将手工计算过程及其验证结论拍照成JPG图片插入在实验报告的word 电子版中。   

数学建模阅读与思考:利用利用校园网-陕西科技大学-图书馆-国内数据库(http://library.sust.edu.cn/gnskj/index.jhtml),自己在“cnki知识网络服务平台”或者“万方数据库”查阅附件给定的数学建模文献资料、阅读文献资料写出分析建模的详细过程、求解计算过程、实际问题解答或阐释的内容。了解牛顿迭代法解非线性方程组的应用。

实验报告书写要求:根据实验情况和结果撰写并递交实验报告。实验报告应当有算法原理简介,算法流程图,程序代码,运行调试记录,计算结果阐释;对于数学建模的应用问题要求利用校园网-陕西科技大学-图书馆-国内数据库(http://library.sust.edu.cn/gnskj/index.jhtml),自己在“cnki知识网络服务平台”或者“万方数据库”查阅附件给定的文献资料、阅读文献资料并写出分析建模的详细过程求解计算过程、实际问题解答或阐释的内容在A4纸上对给定的非线性方程组和文献上的非线性方程组问题用牛顿迭代法手工迭代计算前三步,手工计算要求所有数据保留6位小数,然后将手工迭代计算前三步的计算结果与计算机程序计算的前三步结果进行比较,若数据整数及小数点后4位小数都相同则认为是相同的,若不同,要分析不同的原因并予以校正,经分析、校正后给出比较的结论 将手工计算过程及其验证结论拍照成JPG图片插入在实验报告的word 电子版中。

实验报告打印和装订顺序要求

实验报告打印要求:在A4纸上将实验报告的Word文档双面打印;打印的字迹要清晰,报告内容文字或截图上的文字打印后,要确保字迹清晰可见,若字迹不清影响评阅,报告得分将酌情扣减。

实验报告装订顺序

  • 实验任务(本文档版式不得做任何改动);
  • 实验报告正文(Word文档);
  • 可以将A4纸上详细手工计算过程拍照成JPG图片插入在实验报告的word 电子版中随Word文档双面打印。
  • 左边沿装订

实验总结(学会了......; 掌握了......; 训练了......; 发现了......; 今后学习中......有待提高。)

程序代码

电子报告word文件命名规则:专业班级-完整学号-实验X-姓名.doc, 如信息123班学号为201212030315的郭海涛同学实验2报告word文件命名则应是:信息123-201212030315-实验2-郭海涛.docx, 其中 .docx是Word文件扩展名

特别提醒:学委负责检查电子文件命名规范,命名不规的将不接收。每人必需提交电子报告和纸质报告各一份(两者内容一致)。本实验任务书版式不得做任何改动。电子报告以班为单位提交压缩包.

附件:数学建模参考文献材料:

利用三颗导航卫星进行二维定位的解算模型及其仿真解算

朱喜明,王存良*

(中国电子科技集团第27研究所,郑州 450005)

 :给出了用户接收机只收到三颗导航卫星信号时的二维定位解算模型及 其解算方法,重点介绍了解算方法中接收机概略坐标的求法及利用得到的概略坐标 求解接收机位置和钟差,并做了仿真解算。从卫星和接收机不同位置的很多次仿真 解算结果表明,接收机位置和钟差能够极收收敛,通常迭代两次就能得到非常好的结 果,完全适合工程应用。

关键词:二维定位;概略坐标;迭代求解

此页及其前的内容为实验任务内容,实验任务版式不得做任何更改;实验报告从下页开始编

算法原理:

手工迭代计算:

(1)x0 = [2.00; 0.25];

(2)x0 = [-0.20; 1.00];

(3)x0 = [-1.00; -1.00];

程序代码:

function main()

    % 初始值

    P0 = [2.00; 0.25];

    fprintf('初始迭代值(2.00, 0.25):\n');

    newton_method(P0);

    P0 = [-0.20; 1.00];

    fprintf('初始迭代值(-0.20, 1.00):\n');

    newton_method(P0);

    P0 = [-1.00; -1.00];

    fprintf('初始迭代值 (-1.00, -1.00):\n');

    newton_method(P0);

end

function newton_method(P0)

    F = @(P) [P(1)^2 - 2*P(1) - P(2) + 0.5; P(1)^2 + 4*P(2)^2 - 4];

    J = @(P) [2*P(1)-2, -1; 2*P(1), 8*P(2)];

    tol = 1e-6;

    max_iter = 100;

    P = P0;

    for i = 1:max_iter

        % 计算函数值和雅可比矩阵

        f = F(P);

        Jf = J(P);

        % 计算更新量

        delta_P = -inv(Jf) * f;

        % 更新变量

        P = P + delta_P;

        % 判断收敛

        if norm(delta_P) < tol

            fprintf('经过 %d 次迭代\n', i);

            fprintf('最后: x1 = %.6f, x2 = %.6f\n', P(1), P(2));

            break;

        end

         fprintf('第%d次迭代近似值为: x1 = %.6f, x2 = %.6f\n',i, P(1), P(2));

    end

    % 判断发散

    if i == max_iter

        fprintf("牛顿迭代法发散\n");

    end

end

手工计算结果与程序运行结果前三次比对分析:

(1)x0=[2.00;0.25];

迭代次数

手工x1

Matlab的x1

手工x2

Matlab的x2

第一次

1.906250

1.906250

0.312500

0.312500

第二次

1.900691

1.900691

0.311213

0.311213

第三次

1.900677

1.900677

0.311219

0.311219

(2)x0=[-0.20;1.00];

迭代次数

手工x1

Matlab的x1

手工x2

Matlab的x2

第一次

-0.222449

-0.222449

0.993878

0.993878

第二次

-0.222215

-0.222215

0.993808

0.993808

第三次

-0.222215

-0.222215

0.993808

0.993808

(3)x0=[-1.00;-1.00];

迭代次数

手工x1

Matlab的x1

手工x2

Matlab的x2

第一次

0.166667

0.166667

-1.166667

-1.166667

第二次

0.873543

0.873543

-0.983683

-0.983683

第三次

1.756130

1.756130

-0.707227

-0.707227

我将手工计算和程序计算的前三步结果进行了比较,发现整数及小数点后4位小数都相同,说明程序计算的结果与手工计算结果一致。

数学建模

1.分析建模

给出了用户接收机只收到三颗导航卫星信号时的二维定位解算模型及其解算方法,重点介绍了解算方法中接收机概略坐标的求法及利用得到的概略坐标求解接收机位置和钟差,并做了仿真解算。从卫星和接收机不同位置的很多次仿真

解算结果表明,接收机位置和钟差能够极收收敛,通常迭代两次就能得到非常好的结果,完全适合工程应用。

为了简化计算,假定已利用了导航电文中的卫星星历表预报参数,算出了三颗卫星在地心空间直角坐标系中的坐标分别为(x1,y1,z1)、(x2,y2,z2)、 (x3,y3,z3)海平面上某一位置在地心空间直角坐标系中的坐标为(x,y,z),设在该位置的用户接收机观测三颗星得到伪距观测值,且已进行了各项误差修正(包括卫星钟钟差改正),接收机时钟相对该导航系统时间基准的钟差为ΔtR;则可得观测方程

ρj=Rj+cΔtR(j=1,2,3)

可写为

ρj=[(x-xj)2+(y-yj)2 +(z-zj)2]1/2+d…(1)

式中d=cΔtR,为接收机钟差的等效距离偏差。

由于接收机在海面上,所以其坐标满足方程

x^2/a^2+y^2/a^2+z^2/b^2=1…(2)

式中a=6378140m,b=6356755.28816m

解(1)、(2)组成的方程组,可得x,y,z,d,进而算出接收机所在位置的经度L、纬度B和钟差ΔtR。经仿真解算证明该方程组正确可行,满足实用需求。(如果x,y,z用经纬度表示出来,方程组(1)就变成了关于L、B、d的超越方程组,非常难解)

2. 求解计算过程

上述定位方程组的解法,采用迭代求解。迭代求解首先要解决迭代初始解问题,这里由于d的符号不能事先确定,所以采用先求出接收机的概略坐标(接收机概略坐标指的是接收机在地心空间直角坐标系中的大概位置坐标),并作为初值求出概略坐标的修正量和d;将概略坐标加上其修正量作为第二次的迭代值再重新解算,直到概略坐标的修正量满足要求为止。

2)计算

3)计算

A=m22+n22+1,B=2(m2x1+n2y1-z1-m1m2-n1n2)

C=m12+n12-2m1x1-2n1y1-ρ12+x12+y12+z12

若B2-4AC<0,则方程组(1)无实数解,终止求解过程。此种情况无法定位,该导航系统通常会通过其完好性监测告知用户。

地球表面上二维定位仿真计算。由题易知三颗卫星的高度皆为20200km,某一时刻其经纬度分别为40°、112°,35°、114°,32°、117°;用户接收机在海平面上某一位置的经纬度假定为35°、115°。之所以先假定出接收机的位置 ,是为了与仿真计算得到的接收机位置作比较,观察算法误差。

通过MATLAB牛顿迭代法计算,三颗卫星的地心大地坐标转换为地心空间直角坐标分别为:

x1=-7629540.435m,y1=18883775.23m,z1=17062297.19m;

x2=-8857626.141m,y2=19894554.04m,z2=15224112.62m;

x3=-10235048.89m,y3=20087414.48m,z3=14064802.14m。

将x1、y1、z1的值代入方程所得的值非常接近1;将x2、y2、z2的值代入方程的左端所得的值远大于1;所以x1、y1、z1的的值是接收机的概略坐标。

3.实际问题解答或阐释的内容

经过大量仿真表明:对于大地高在45m以下的地区,可以按照海平面上的二维定位进行计算,其定位误差随着大地高的减小而变小;对于大地高在45m以上的地区,按照海平面上的二维定位进行计算,通常定位误差比概略位置误差还大,所以不再应用地球椭球方程,应采用方程组进行定位,将得到的两组解分别转换为地心大地坐标系中的坐标,其大地高的绝对值较小的那组解即为接收机所在的位置,由于忽略了接收机的钟差,这种情况定位误差较大。

实验总结:

学会了使用牛顿迭代法求解非线性方程组的基本原理和方法。通过实验,我了解到牛顿迭代法是一种有效的数值计算方法,可以用于求解复杂的非线性方程组。

掌握了编写 MATLAB 程序实现牛顿迭代法的能力。在实验中,我学会了如何利用 MATLAB 编写程序来求解非线性方程组,提高了我的编程能力。

训练了分析和解决实际问题的能力。实验要求结合校园网数据库中的文献资料进行数学建模分析,这锻炼了我的问题分析和求解能力,提高了我的实际应用能力。

发现了牛顿迭代法的收敛性和计算精度的影响因素。在实验中,我发现初始值的选择对于牛顿迭代法的收敛性和计算精度有很大影响,这启示我在实际应用中要注意初始值的选择。

今后学习中需要进一步提高数学建模和算法设计的能力。通过本次实验,我意识到数学建模和算法设计是非常重要的能力,今后我将继续学习和提高这方面的能力,以更好地应用于实际问题的求解中。


http://www.ppmy.cn/embedded/137521.html

相关文章

【Linux】内核参数修改

说明 在 liunx系统中内核参数主要涉及到两处的配置文件&#xff1a; /etc/sysctl.conf 和这个目录/etc/sysctl.d下的所有.conf 结尾的文件。 /etc/sysctl.d/ 存放的系统内核参数配置文件在系统启动时会被 sysctl 工具读取并应用。以下是关于这些文件的加载机制和如何避免相互…

The 3rd Universal CupStage 15: Chengdu, November 2-3, 2024(2024ICPC 成都)

Problem L. Recover Statistics 题目意思&#xff1a; 给定a, b, c三个值&#xff0c;确保构造的数列中包含满足题目的数量 解题思路&#xff1a; 100 中 选择a 50个&#xff0c; b45个&#xff0c; c4个。 #include <iostream>using namespace std;using ll long …

HarmonyOS 沉浸式状态实现的多种方式

1. HarmonyOS 沉浸式状态实现的多种方式 HarmonyOS 沉浸式状态实现的多种方式 1.1. 方法一 1.1.1. 实现讲解 &#xff08;1&#xff09;首先设置setWindowLayoutFullScreen(true)&#xff08;设置全屏布局&#xff09;。   布局将从屏幕最顶部开始到最底部结束&#xff0c…

基于yolov8、yolov5的番茄成熟度检测识别系统(含UI界面、训练好的模型、Python代码、数据集)

摘要&#xff1a;番茄成熟度检测在农业生产及质量控制中起着至关重要的作用&#xff0c;不仅能帮助农民及时采摘成熟的番茄&#xff0c;还为自动化农业监测提供了可靠的数据支撑。本文介绍了一款基于YOLOv8、YOLOv5等深度学习框架的番茄成熟度检测模型&#xff0c;该模型使用了…

C语言 | Leetcode C语言题解之第552题学生出勤记录II

题目&#xff1a; 题解&#xff1a; const int MOD 1000000007;struct Matrix {long mat[6][6];int row, col; };struct Matrix multiply(struct Matrix a, struct Matrix b) {int rows a.row, columns b.col, temp b.row;struct Matrix c;memset(c.mat, 0, sizeof(c.mat)…

Unet++改进24:添加DualConv||轻量级深度神经网络的双卷积核

本文内容:添加DualConv 目录 论文简介 1.步骤一 2.步骤二 3.步骤三 4.步骤四 论文简介 卷积神经网络(CNN)架构通常对内存和计算要求很高,这使得它们在硬件资源有限的嵌入式系统中不可行。 我们提出了双卷积核(DualConv)来构建轻量级深度神经网络。DualConv结合3 3和1…

基于微信小程序的高校实习管理系统设计与实现,LW+源码+讲解

摘 要 信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全性&#xff0c;还是可操作性等各个方面来讲&#xff0c;遇到了互联网时代才发现能补上自…

Unity Assembly Definition Assembly Definition Reference

文章目录 1.Unity 预定义程序集2.Assembly definition3. Assembly definitions相关实验 1.Unity 预定义程序集 Unity 有4个预定义程序集&#xff1a; 阶段程序集名脚本文件1Assembly-CSharp-firstpassStandard Assets, Pro Standard Assets和Plugins文件夹下面的运行时脚本2A…