已知函数Cf=(1000*C*D1*cos(C*atan(E1*(atan(B1*X1) - B1*X1) + B1*X1))*(B1 - E1*(B1 - B1/(B1^2*X1^2 + 1))))/((E1*(atan(B1*X1) - B1*X1) + B1*X1)^2 + 1);cf为因变量,X1为自变量,其他为已知参数,用matlab编写一套程序,使已知因变量cf求自变量X1
时间: 2023-07-23 07:11:39 浏览: 130
可以使用 MATLAB 自带的数值解法函数 fzero,通过不断调用函数得到 X1 的值。
以下是程序代码:
```matlab
% 已知参数
C = 1000;
D1 = 10;
E1 = 0.1;
B1 = 0.5;
cf = 100;
% 定义函数
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;
% 求解
x1 = fzero(f, 1);
disp(x1);
```
其中,f 是我们要求解的函数,fzero 是使用数值解法求解非线性方程的函数。在此程序中,我们将 fzero 函数的第一个参数设为 f,即要求解的函数,第二个参数设为 1,即从 X1=1 的位置开始寻找解。最终,程序将会输出求得的 X1 的值。
相关问题
函数cf(X1)=(1000.*C.*D1.*cos(C.*atan(E1.*(atan(B1.*X1) - B1.*X1) + B1.*X1)).*(B1 - E1.*(B1 - B1./(B1^2.*X1.*X1 + 1))))./((E1.*(atan(B1.*X1) - B1.*X1) + B1.*X1).^2 + 1);C,D1,E1,,B1为已知参数,求反函数
对于这种情况,我们可以使用 MATLAB 中的符号工具箱来推导反函数。具体步骤如下:
1. 首先定义符号变量和已知参数:
```matlab
syms x y C D1 E1 B1
C = 1;
D1 = 2;
E1 = 3;
B1 = 4;
```
2. 定义函数:
```matlab
f = (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);
```
3. 求解反函数:
```matlab
y = solve(f - x, x);
```
其中,`solve` 函数可以用于解方程,这里我们令 `f - x = 0`,表示要求解的反函数是 `f` 关于 `x` 的反函数。
最后,我们可以使用 `y` 来表示 `f` 的反函数,例如:
```matlab
disp(y) % 显示反函数
```
需要注意的是,由于这是一个非常复杂的函数,求解其反函数可能会非常困难,因此您可能需要耐心等待 MATLAB 运行完毕。
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. 相关文档
根据错误信息,出现了以下两个错误:
1. "对于此运算,数组的大小不兼容"。这个错误通常是因为数组的维数或大小不匹配导致的。需要检查代码中的数组定义和运算是否正确。
2. "Failure in initial objective function evaluation. FSOLVE cannot continue.",这个错误通常是因为初始目标函数的计算失败导致的,可能是因为初始值不合理或者函数本身存在问题。需要检查代码中的函数表达式和初始值是否正确。
针对你的代码,我发现在定义函数f时,变量cf是在fsolve函数之后才计算出来的,这可能会导致函数表达式中的cf值错误。解决方法是将计算cf的代码放在f函数之前。
同时,在fsolve函数中,初始值[0 20]可能不太合理,需要根据函数的特点和实际问题来选择合适的初始值。
另外,代码中的角度单位似乎是弧度,但是在计算中没有进行单位转换,这可能会导致计算结果不正确。需要在计算中加上角度单位的转换。
阅读全文