Matlab中非线性方程的交叉特征

时间:2012-07-16 15:29:18

标签: matlab nonlinear-functions

我想根据施加的电流创建螺旋桨角速度的Matlab图。关键是,这需要组合两个相互依赖的数据集。

首先,阻力系数c_d取决于角速度omega(我没有公式,只有数据),如下图所示 - 特征c_d(omega)可以轻松地线性化为{ {1}}。

其次,c_d(omega) = p*omega + p_0不仅取决于应用的当前omega,还取决于阻力系数i

解决案例的脚本,其中c_d(omega)在下面是常量。必须以某种方式使用Matlab命令加入这两者。谢谢你的帮助。

c_d

enter image description here

修改

尝试关注 bdecaf的解决方案。所以我创建了一个函数%%Lookup table for drag coefficient c_d c_d_lookup = [248.9188579 0.036688351; %[\omega c_d] 280.2300647 0.037199094; 308.6091183 0.037199094; 338.6636881 0.03779496; 365.8908244 0.038305703; 393.9557188 0.039156941; 421.9158934 0.039667683; 452.2846224 0.040348674; 480.663676 0.041199911; 511.032405 0.042051149; 538.9925796 0.042561892; 567.2669135 0.043242882; 598.4734005 0.043668501; 624.1297405 0.044264368; 651.9851954 0.044604863; 683.6105614 0.045200729]; subplot(2,1,1) plot(c_d_lookup(:,1), c_d_lookup(:,2)) title('This is how c_d depends on \omega') ylabel('c_d') xlabel('\omega [rad/s]') %%Calculate propeller angular speed in terms of applied current. omega %%depends on c_d, which in turn depends on omega. The formula is: % omega(i) = sqrt(a*i / (b * c_d(omega))) % Where: % i - applied current % omega - propeller angular velocity % a,b - coefficients i = [1:15]; a = 0.0718; b = 3.8589e-005; %If c_d was constant, I'd do: omega_i = sqrt(a .* i / (b * 0.042)); subplot(2,1,2) plot(i, omega_i) ylabel({'Propeller ang. vel.', '\omega [rad/s]'}) xlabel('Applied current i[A]') title('Propeller angular velocity in terms of applied current') ,如下所示:

c_d_find

我对Matlab函数句柄一无所知,但似乎理解了这个想法......在Matlab命令窗口我输入了:

function c_d = c_d_find(omega, c_d_lookup)
    c_d = interp1(c_d_lookup(:,1), c_d_lookup(:,2), omega, 'linear', 'extrap');
end

我希望创建正确的函数句柄。接下来我该怎么办?执行以下操作无效:

f = @(omega) omega - sqrt(a .* i / (b * c_d_find(omega, c_d_lookup)))

1 个答案:

答案 0 :(得分:1)

嗯...

不知道我是否理解正确 - 但看起来你正在寻找一致的解决方案。

你的方程看起来并不复杂我会勾勒出这样的解决方案:

  1. 编写一个函数function c_d = c_d_find(omega)进行一些插值
  2. 创建一个像f = @(omega) omega - sqrt(a .* i / (b * c_d_find(omega)))这样的函数句柄 - 对于一致的omega
  3. ,这是零
  4. 使用omega_consistent =fzero(f,omega_0)
  5. 计算一致的欧米茄