首页 > 编程知识 正文

牛顿迭代法求解线性方程,线性方程微分求解公式

时间:2023-05-03 09:10:38 阅读:225506 作者:2911

目的:非线性拟合求得函数后,计算特定y值对应的x值。

第一步:曲线拟合

调用函数代码

function diff=F4P(p,d,pd)

dmin=0.07

diff=100*(1./((log(exp(1)+(p(1)./d).^p(2))).^p(3))).*(1-(log(1+p(4)./d)./log(1+p(4)./dmin)).^7)

曲线拟合代码

[NUM]=xlsread('Skempton ABCD',3,'A1:CE2')

d=NUM(1,:)

pd=NUM(2,:)

p0=[1 2 0.5 0.001]

p=lsqcurvefit(@F4P,p0,d,pd)

dmin=0.07

pdnew=100*(1./((log(exp(1)+(p(1)./d).^p(2))).^p(3))).*(1-(log(1+p(4)./d)./log(1+p(4)./dmin)).^7)

semilogx(d,pd,'-or',d,pdnew,'b')

第二步:求因变量y值对应的x值

求单独一个点时,初值选取合适,即可得到结果。

f=@(d)100*(1./((log(exp(1)+(p(1)./d).^p(2))).^p(3))).*(1-(log(1+p(4)./d)./log(1+p(4)./dmin)).^7)-20

x=fzero(f,1.2)

求一系列y值时,只有一部分有解,其他的结果显示Nan(无解)

y=1:1:30

for i=1:numel(y)

f=@(d)100*(1./((log(exp(1)+(p(1)./d).^p(2))).^p(3))).*(1-(log(1+p(4)./d)./log(1+p(4)./dmin)).^7)-y(i)

x(i)=fzero(f,1)

end

计算结果见附图x0=1; 如果将代码中初值改为0.1,即 x(i)=fzero(f,1)改为 x(i)=fzero(f,0.1),计算结果见附图x0=0.1

问题1:由此可见,fzero是在x0的一定范围内求解的,那么这个范围是多少呢?能否将搜索范围变大。

问题2:如果我想求得y=1:1:30所有对应的解,该如何修改代码?我尝试了以下命令,但报错

y=1:1:30

x0=[0.1 2]

for i=1:numel(y)

f=@(d)100*(1./((log(exp(1)+(p(1)./d).^p(2))).^p(3))).*(1-(log(1+p(4)./d)./log(1+p(4)./dmin)).^7)-y(i)

x(i)=fzero(f,x0)

end

(1)报错为The function values at the interval endpoints must differ in sign. 意思是说f(0.1)和f(2)的值必须一个正数,一个负数么?

(2)我改成x0=[-0.1 2],又提示Function values at interval endpoints must be finite and real.

(3)那么请问我该怎么修改代码,才能实现我的目的呀(y=1:1:30所有对应的解)?

问题3:如果将fzero命令改为fsolve命令,就能得到y=1:1:30所有对应的解,且初值不需要为区间。fzero是求解一元非线性方程组的,fsolve是用来求解多元非线性方程组。似乎fsolve比fzero的命令强大不少,那么fzero存在的意义是什么,fsolve也可以求解一元非线性方程呀?

x0=0.1.jpg

(22.13 KB, 下载次数: 0)

2015-2-10 06:29 上传

x0=1.jpg

(21 KB, 下载次数: 0)

2015-2-10 06:29 上传

2015-2-10 06:30 上传

点击文件名下载附件

19.76 KB, 下载次数: 18

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。