问题描述
已知平面的三个点(x,y)分别为(0.1,1.1627), (0.23,1.3694), (0.48,1.4789),其曲线图如下:
又已知(x,y)的函数关系式为:
求:参数a,b,c的值。
初步分析
从图形上来看,经过定性分析,可以有以下结论:
分析曲线斜率:
曲线斜率为正值,因此bc乘积大于0。
曲线斜率随x增大而变小,因此c小于0。结合bc乘积大于0,得到b小于0。
分析曲线极限值:
当x取正无穷大时,由于c小于0,指数项变为0,有y=a。结合曲线,可以得出a应大于1.4789。
总结:
牛顿迭代法简介
对于方程 f(x)=0,可以用以下迭代的方法求解。
如果x为单个变量,则f(x)为单个方程,上式很好理解。
如果x为多个变量,则f(x)为方程组,f(x)导数为:
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
可以发现结果完全匹配。