matlab无穷范数_牛顿迭代法解非线性方程组——Matlab实现

本文介绍了使用Matlab的牛顿迭代法来解决非线性方程组的问题。通过分析平面三个点的坐标,推断出参数a、b、c的性质,利用牛顿迭代法进行求解。通过定义初始解、迭代计算,最终得到了满意的结果并与理论值进行了比较。
摘要由CSDN通过智能技术生成

问题描述

已知平面的三个点(x,y)分别为(0.1,1.1627), (0.23,1.3694), (0.48,1.4789),其曲线图如下:

1649534b450f21ba4763b974bbcccade.png

又已知(x,y)的函数关系式为:

f2763bf59e8589ecccf239b1eb10c1c6.png

求:参数a,b,c的值。

初步分析

从图形上来看,经过定性分析,可以有以下结论:

  1. 分析曲线斜率:

08e14c6b8c6089279abe9bbec10e77da.png

  • 曲线斜率为正值,因此bc乘积大于0。

  • 曲线斜率随x增大而变小,因此c小于0。结合bc乘积大于0,得到b小于0。

  1. 分析曲线极限值:

  • 当x取正无穷大时,由于c小于0,指数项变为0,有y=a。结合曲线,可以得出a应大于1.4789。

  1. 总结:

bab0dabc90ae6fe6d75b048cbd2cf866.png

牛顿迭代法简介

对于方程 f(x)=0,可以用以下迭代的方法求解。

0f6cd495f0c151fcdc14439235f9402d.png

如果x为单个变量,则f(x)为单个方程,上式很好理解。

如果x为多个变量,则f(x)为方程组,f(x)导数为:

519a30cc82d1d70cfe1f883c85c41c28.png

Matlab代码实现

定义初始解,

x=[1;1;1];

迭代计算

while(1)% 取a,b,c
a=x(1);b=x(2);c=x(3);% 计算f(x)
f_x=[
a+b*exp(c*0.1)-1.1627;
a+b*exp(c*0.23)-1.364;
a+b*exp(c*0.48)-1.4789;
];% 计算f(x)导数
df_x=[
1 exp(c*0.1) b*0.1*exp(c*0.1);
1 exp(c*0.23) b*0.23*exp(c*0.23);
1 exp(c*0.48) b*0.48*exp(c*0.48);
];% 迭代计算。在M文件中,建议将inv(A)*b写成A\b
x_1=x-(df_x)\f_x;% 迭代计算条件,设置为相邻解的2-范数小于0.01if(norm(x_1-x,2)<0.01)break;else
x=x_1;endend

显示结果

disp(x_1)
    1.5042
-0.6773
-6.8480

比较结果

a=x_1(1);b_1=x(2);c_1=x(3);
f=@(x) a+b*exp(c*x);
disp([num2str(f(0.1)),' ',num2str(f(0.23)),' ',num2str(f(0.48))]);
1.1627 1.364 1.4789

可以发现结果完全匹配。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值