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

该博客探讨了在MATLAB中使用fsolve和fzero解决非线性方程的问题。首先,通过曲线拟合确定函数参数,然后利用这些参数计算特定y值对应的x值。作者遇到fzero在寻找根时依赖于初始值范围的问题,并提问如何扩大搜索范围以获取所有解。此外,尝试使用fsolve代替fzero成功得到完整解集,但对两者功能的区别感到困惑。最后,作者提出fzero在处理一元非线性方程时的局限性及其与fsolve的适用场景比较。
摘要由CSDN通过智能技术生成

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值