【问题标题】:MATLAB error using fzero function to solve the loopMATLAB错误使用fzero函数解决循环
【发布时间】:2023-01-23 20:28:16
【问题描述】:

我的以下代码生成图 1 中的 V 和 D 值图。在图中,抛物线和直线相交,我需要从一个循环的图中找到根。所以我尝试使用fzero函数,但是出现了错误:

逻辑 AND (&&) 和 OR (||) 运算符的操作数必须可转换为逻辑标量值。使用 ANY 或 ALL 函数将操作数减少为逻辑标量值。

fzero 错误(第 326 行)
elseif ~isfinite(fx) || ~isreal(fx)

HW1 错误(第 35 行)
x=fzero(乐趣,1);

我的代码是:

clear all; close all

W = 10000; %[N]
S = 40; %[m^2]
AR = 7;
cd0 = 0.01;
k = 1 / pi / AR;
clalpha = 2*pi;
Tsl=800; 
figure(1);hold on; xlabel('V');ylabel('D')
for h=0:1:8; 
    i=0;
    for alpha = 1:0.25:12
        i=i+1;
        rho(i)=1.2*exp(-h/10.4);
        cl(i) = clalpha * alpha * pi/180;
        V(i) = sqrt(2*W/rho(i)/S/cl(i));
        L(i) = 0.5 * rho(i) * V(i) * V(i) * S * cl(i);
        cd(i) = cd0 + k * cl(i) * cl(i);
        D(i) = 0.5 * rho(i) * V(i) * V(i) * S * cd(i);
        clcd(i) = cl(i)/cd(i);
        p(i) = D(i)*V(i);
        ang(i) = alpha;
        T(i)=Tsl*(rho(i)/1.2).^0.75;
    end
    figure(1); plot(V,D); hold on 
    plot(V,T);
end
fun = @(V) 0.5*V.*V.*rho.*S.*cd-T;
x=fzero(fun,1);

可能我不应该使用 fzero 函数,但任务是从绘图中找到 V 的根(图 1)。分别有抛物线和直线。

【问题讨论】:

    标签: matlab


    【解决方案1】:

    来自 fzero(fun,x) 的文档

    fun:要求解的函数,指定为标量值函数的句柄或此类函数的名称。 fun 接受一个标量x并返回一个标量fun(x).

    您的函数不会为标量输入返回标量值,它总是返回一个向量,该向量对于与 fzero 一起使用的函数无效。

    【讨论】:

      猜你喜欢
      • 2018-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多