matlab fsolve 与fzero,fsolve、fzero求解非线性方程

本文介绍了一种利用MATLAB进行非线性拟合的方法,并探讨了如何通过拟合得出的函数来求解特定y值对应的x值。文中详细展示了使用fzero和fsolve函数的过程及遇到的问题,包括不同初始值对求解结果的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目的:非线性拟合求得函数后,计算特定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 上传

442a53943febe9465fc072b4fbe10813.gif

b2a5a3e0dcc7d508e00275fe42fce1b5.gif

082937enahnfavniarq5ez.jpg

x0=1.jpg

(21 KB, 下载次数: 0)

2015-2-10 06:29 上传

442a53943febe9465fc072b4fbe10813.gif

b2a5a3e0dcc7d508e00275fe42fce1b5.gif

082938kpsh5260q4ctsq52.jpg

5724a1379ceb16a514510c7aa4f77048.gif

2015-2-10 06:30 上传

点击文件名下载附件

19.76 KB, 下载次数: 18

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值