🏆本文收錄于「Bug調優」專欄,主要記錄項目實戰過程中的Bug之前因后果及提供真實有效的解決方案,希望能夠助你一臂之力,幫你早日登頂實現財富自由🚀;同時,歡迎大家關注&&收藏&&訂閱!持續更新中,up!up!up!!
問題描述
??核心是解三自由度微分方程組,解出θ關于時間t的變化圖像.設定一個功率恒定變加速度的工況,圖中時間t是關于速度v的函數,取反函數v=@(t)finverse(t)代入 wm_func中求得角速度.圖一是主程序,圖二是參數和方程.系統提示我未定義與 ‘double’ 類型的輸入參數相對應的函數 ‘finverse’,如圖三所示,想問一下我這個錯在哪里有沒有修改辦法或者建議
clear;clc;close all;func
%初始參數,該參數變化,myfun程序要對應調整
syms t;
syms v;
t=@(v)(505.2*ln(49897/(55000-398.7*v))+1460*(12.8-v)/398.7);
v=@(t)finverse(t);
wm_func = @(t)(55*(finverse(t)*3.6)*9550/(3600*0.4064/(0.93*14)))*pi*2/60;zi=4;%內轉子極對數
zo=14;%外轉子極對數k
z1=32;%小齒輪齒數
z2=99;%大齒輪齒數
ms=4.62e-3;
I=z2/z1;%機械齒輪速比
G=(zo+zi)/zi;%磁齒輪速比
%一、計算過程
tmax=5;
tspan = 0:1e-4:tmax;
% tmax=900*2*pi/wm;% 計算時長,按輸入軸的周期數計算
bc=2e-5;
y0=[0;0;0;wm_func(0);wm_func(0)/G;wm_func(0)/(G*I)];
% y0=[0;0;0;wm_func;wm_func/G;wm_func/(G*I)];
[t,y] = ode45(@(t,y)myfun3(t,y,wm_func), tspan, y0);
% [t,y] = ode45(@(t,y)myfun3(t,y), tspan, y0);
% [t,y]=odeRK4sys('myfun3',tmax,bc,y0);figure;plot(t,y(:,1)/G-y(:,2));
title('時域響應圖');
xlabel('時間 (s)');
ylabel('扭轉振幅(rad)');%磁齒輪的相對彈性角度
figure;plot(t,y(:,2)/I-y(:,3));
title('時域響應圖');
xlabel('時間 (s)');
ylabel('扭轉振幅(rad)');%機械齒輪的相對彈性轉角;
figure;plot(t,y(:,1),t,y(:,2),t,y(:,3));
title('時域響應圖');
xlabel('時間 (s)');
ylabel('轉速(rad/s)');
function dydt=myfun3(t,y,wm_func)
wm = wm_func(t);
zi=4;%內轉子極對數
zo=14;%外轉子極對數
z1=32;%小齒輪齒數
z2=99;%大齒輪齒數
arf0=20/180*pi;%壓力角
ms=4.62e-3;
r2=ms*z1/2;%小齒輪分度圓
r3=ms*z2/2;%大齒輪分度圓
rb2=r2*cos(arf0);%小齒輪基圓
rb3=r3*cos(arf0);%大齒輪基圓
I=z2/z1;%機械齒輪速比
G=(zo+zi)/zi;%磁齒輪速比
% Tm =(1460*9.8*0.012+1.04*1460*2.67+0.32*2.25*(10+2.67*t*3.6)^2/21.15)*0.4064/(0.93*14);%起步加速
Tm=9550*55/(60*wm/(2*pi)); ;
TL=Tm*I*G;%變速器負載
%3 轉動慣量
IM=0.081197;%電機轉子轉動慣量kgm2
I0=0.181197;%磁齒輪低速級轉動慣量kgm2
I1=0.013663;%磁齒輪高速級轉動慣量kgm2
I2=0.0230596;%機械小齒輪轉動慣量
I3=1.9825692;%機械大齒輪轉動慣量
IL=21;%整車等效轉動慣量%4 剛度與阻尼
%齒輪的阻尼和剛度
w1=wm*G;%機械小齒輪輸入轉速
kp=10.51e8;
kb=0.25e8;%兩個齒輪的剛度曲線為正弦曲線,
km=kp+kb*sin(w1*t*z1);
sg=0.16;%齒輪阻尼比
cm=2*sg*sqrt(kp*I2*I3/(I2*rb3^2+I3*rb2^2));b=2e-4;xx=rb2*y(2)-rb3*y(3);dxx=rb2*y(5)-rb3*y(6);if xx-b>0fx=xx-b;elseif xx+b<0fx=xx+b;elsefx=0;end
F23=km*fx+cm*dxx;
T0=1.7*Tm*G;
Tc1=0.2*T0*sin(wm*t);
Tc=0.1*(zi*y(4)-(zi+zo)*y(5));
T21=T0*sin(zi*y(1)-(zi+zo)*y(2))+Tc+Tc1;y(7)=(Tm-T21/G)/(I0+IM);
y(8)=(T21-r2*F23)/(I2+I1);
y(9)=(-TL+r3*F23)/(I3+IL);dydt=[y(4)y(5)y(6)y(7)y(8)y(9)];
end
如上問題有來自我自身項目開發,有的收集網站,有的來自讀者,如有侵權,立馬刪除。
解決方案
??如下是上述問題的解決方案,僅供參考:
??在 MATLAB 中,錯誤信息 “未定義與 ‘double’ 類型的輸入參數相對應的函數 ‘finverse’” 通常表示 MATLAB 無法找到名為 finverse
的函數,該函數應該接受 ‘double’ 類型的輸入參數。在您提供的代碼中,問題出現在以下這行:
v=@(t)finverse(t);
這里,您嘗試定義一個匿名函數 v
,它使用 finverse
作為其操作。然而,finverse
并沒有在您的代碼中定義,或者沒有被正確引用。
可能的解決方案:
- 定義
finverse
函數:如果finverse
是您自定義的函數,確保它在 MATLAB 的搜索路徑中,并且具有正確的定義。例如:
function tinv = finv(t)% 這里是 finverse 函數的實現tinv = ... % 根據 t 計算逆函數的輸出end
- 使用 MATLAB 內置函數:如果
finverse
應該是 MATLAB 的內置函數,確保函數名正確無誤。例如,如果您想使用fzero
函數來找到函數的零點,應該這樣寫:
v = @(t) fzero(@(x) yourFunction(x) - t, initialGuess);
其中 yourFunction
是您要查找零點的函數,initialGuess
是一個初始猜測值。
-
檢查變量作用域:如果您在其他地方定義了
finverse
,請確保它可以在當前作用域中訪問到。 -
檢查拼寫和大小寫:MATLAB 是區分大小寫的,確保函數名的拼寫和大小寫都是正確的。
-
使用
feval
或eval
:如果finverse
是一個字符串形式的函數名,您可以使用feval
或eval
來調用:
v = @(t) feval('finverse', t);
或者
v = @(t) eval(['finverse(' num2str(t) ')']);
-
檢查 MATLAB 版本:確保您使用的 MATLAB 版本支持您嘗試調用的函數。
-
查看 MATLAB 函數索引:如果您不確定
finverse
的正確用法,可以查看 MATLAB 的函數索引或使用helpwin finv
(如果finverse
是指fmin
的逆函數,這可能是一個錯誤)。
特別注意:
- 您提供的代碼中
t
是關于v
的函數,但您試圖定義v
為t
的函數的反函數。這需要t(v)
是一個單調函數,以便存在唯一的反函數。 - 如果
t(v)
不是單調的,或者您沒有正確定義finverse
,MATLAB 將無法計算v(t)
。
請根據上述建議檢查和修改您的代碼。如果 finverse
是您自定義的函數,請確保它在 MATLAB 的搜索路徑中,并且具有正確的定義。如果 finverse
是內置函數或您打算使用特定的 MATLAB 函數,請確保正確引用它。
??希望如上措施及解決方案能夠幫到有需要的你。
??PS:如若遇到采納如下方案還是未解決的同學,希望不要抱怨&&急躁,畢竟影響因素眾多,我寫出來也是希望能夠盡最大努力幫助到同類似問題的小伙伴,即把你未解決或者產生新Bug黏貼在評論區,我們大家一起來努力,一起幫你看看,可以不咯。
??若有對當前Bug有與如下提供的方法不一致,有個不情之請,希望你能把你的新思路或新方法分享到評論區,一起學習,目的就是幫助更多所需要的同學,正所謂「贈人玫瑰,手留余香」。
??寫在最后
??ok,以上就是我這期的Bug修復內容啦,如果還想查找更多解決方案,你可以看看我專門收集Bug及提供解決方案的專欄「Bug調優」,都是實戰中碰到的Bug,希望對你有所幫助。到此,咱們下期拜拜。
碼字不易,如果這篇文章對你有所幫助,幫忙給bug菌來個一鍵三連(關注、點贊、收藏) ,您的支持就是我堅持寫作分享知識點傳播技術的最大動力。
同時也推薦大家關注我的硬核公眾號:「猿圈奇妙屋」 ;以第一手學習bug菌的首發干貨,不僅能學習更多技術硬貨,還可白嫖最新BAT大廠面試真題、4000G Pdf技術書籍、萬份簡歷/PPT模板、技術文章Markdown文檔等海量資料,你想要的我都有!
📣關于我
我是bug菌,CSDN | 掘金 | InfoQ | 51CTO | 華為云 | 阿里云 | 騰訊云 等社區博客專家,C站博客之星Top30,華為云2023年度十佳博主,掘金多年度人氣作者Top40,掘金等各大社區簽約作者,51CTO年度博主Top12,掘金/InfoQ/51CTO等社區優質創作者;全網粉絲合計 30w+;硬核微信公眾號「猿圈奇妙屋」,歡迎你的加入!免費白嫖最新BAT互聯網公司面試真題、4000G PDF電子書籍、簡歷模板等海量資料,你想要的我都有,關鍵是你不來拿哇。