#求助 fsolve指令使用遇到问题

博主在使用fsolve解决含有2002个未知数和方程的非线性代数问题时遇到困难。已知fsolve的三种算法:trust-region-dogleg、trust-region和levenberg-marquardt。在尝试应用fsolve时,遇到了错误,全局变量的设置可能在不同文件间存在冲突。在case1.m文件中运行时出现未知错误,急需寻求解决方案。
摘要由CSDN通过智能技术生成

#求助:matlab中fsolve指令该如何用

先谈一些我认识的fsolve指令

近期在使用fsolve指令求解一个非线性代数方程式,总共有2002个未知数,2002个方程,我有自己去了解一些关于fsolve的用法,首先他主要有三种算法,trust-region-dogleg(信任区间狗腿法,默认方法)、trust-region(信任区间法)、levenberg-marquardt(简称LM),其他的帮助会有在其他博主的文章中找到,再次不赘述

讲述一下自己的问题

我将自己的函数放在b1的matlab中,

function F=b1(w)
global dt a nx y0 g S0
F(1:nx,1)=1/dt*a*w(1:nx)+1/2*w(nx+1:2*nx)-y0(1:nx)-w(2*nx+1)*ones(nx,1);
F(nx+1:2*nx,1)=1/dt*a*w(nx+1:2*nx)+1/2*w(nx+1:2*nx).^2./w(1:nx)+g/4*w(1:nx).^2...
 -1/2*a*g*w(1:nx).*S0-y0(nx+1:2*nx)-w(2*nx+2)*ones(nx,1);
F(2*nx+1,1)=w(nx+1)-4.42;
F(2*nx+2,1)=w(nx)-2;

global的指令是全域变数,即变数dt、a、nx、y0、g、S0在b1和case1.m文件中同时使用。
在case1.m中的指令如下

options = optimoptions( 'fsolve' , 'Display' , 'it
clear;clc; cetia=0;lf=1.43;lr=3.57;V=60/3.6;m=5760;a=1; %cf对应的af不唯一,取af大于零的时候 ar=0:0.5:10; %根据魔术公式求导得到ar-cr的关系,求的cr,cf a0=1.5999;a1=-0.0048;a2=0.9328;a3=4.0847;a4=44.8338; a6=-0.0076;a7=-0.1807;a8=-0.0026;a9=0.0367; a11=0.0004;a12=-0.0115;a17=0.0009; F_zr=m*9.8*lf/(lf+lr)/1000; C=a0*(5-a)/4; D2=(a1*(F_zr^2)+a2*F_zr)*a; B2=(a3*sin(2*atan(F_zr/a4))/(C*D2))*(2-a); Sh2=a8*F_zr+a9; E2=(a6*F_zr+a7); cr=(1000*C*D2*cos(C*atan(E2*(atan(B2*ar) - B2*ar) + B2*ar)).*(B2 - E2*(B2 - B2./(B2^2*ar.^2 + 1))))./((E2*(atan(B2*ar) - B2*ar) + B2*ar).^2 + 1); cf=(m*V^2*lr*cr)./(cr*(lf+lr)*(lf+lr)-m*V^2*lf); % 已知参数 F_zf=m*9.8*(lr)/(lr+lf)/1000; D1=(a1*(F_zf^2)+a2*F_zf)*a; B1=(a3*sin(2*atan(F_zf/a4))/(C*D1))*(2-a); E1=a6*F_zf+a7; % 定义af-cf函数 f = @(x) (1000*C*D1*cos(C*atan(E1*(atan(B1*x) - B1*x) + B1*x)).*(B1 - E1*(B1 - B1./(B1^2*x.^2 + 1))))./((E1*(atan(B1*x) - B1*x) + B1*x).^2 + 1) - cf; % 反求af x = fsolve(@(x) (1000*C*D1*cos(C*atan(E1*(atan(B1*x) - B1*x) + B1*x)).*(B1 - E1*(B1 - B1./(B1^2*x.^2 + 1))))./((E1*(atan(B1*x) - B1*x) + B1*x).^2 + 1) - cf,[0 20]); af=x/57;ar1=ar/57; %求得侧偏角和横摆角速度 r=(V*(cetia-af+ar1))/(lf+lr); betia=(lf*(cetia-af)-lf*ar1)/(lf+lr); figure(5); plot(betia,r); axis([-40,40,-40,40]); title('betia-r'); xlabel('betia');ylabel('r'); hold on;报错对于此运算,数组的大小不兼容。 出错 untitled2>@(x)(1000*C*D1*cos(C*atan(E1*(atan(B1*x)-B1*x)+B1*x)).*(B1-E1*(B1-B1./(B1^2*x.^2+1))))./((E1*(atan(B1*x)-B1*x)+B1*x).^2+1)-cf (第 30 行) x = fsolve(@(x) (1000*C*D1*cos(C*atan(E1*(atan(B1*x) - B1*x) + B1*x)).*(B1 - E1*(B1 - B1./(B1^2*x.^2 + 1))))./((E1*(atan(B1*x) - B1*x) + B1*x).^2 + 1) - cf,[0 20]); 出错 fsolve (第 264 行) fuser = feval(funfcn{3},x,varargin{:}); 出错 untitled2 (第 30 行) x = fsolve(@(x) (1000*C*D1*cos(C*atan(E1*(atan(B1*x) - B1*x) + B1*x)).*(B1 - E1*(B1 - B1./(B1^2*x.^2 + 1))))./((E1*(atan(B1*x) - B1*x) + B1*x).^2 + 1) - cf,[0 20]); 原因: Failure in initial objective function evaluation. FSOLVE cannot continue. 相关文档
最新发布
06-01
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值