1樓:匿名使用者
原因:你原來的if巢狀寫法雖然不可取,但基本上還是可行的。問題出現在倒數第二個if分支:
fee=60;
其中變數fee少了下標(i,j)。這樣的後果是,一旦執行到這個分支,就會把變數fee給賦值成為一個標量60。如果後續x還有其他元素,則執行其它分支時會把fee自動擴充套件為相應大小的矩陣(前面用zeros對fee進行預置也白做了),如果剛好是對x的最後一個元素執行此分支,則結果就會返回一個標量。
建議:其實整個函式改寫成下面這樣幾行就夠了:
function fee = fee1( x )
fee = zeros( size(x) );
x0 = [0 300:50:500 600:100:1000];
y0 = [20 24:2:28 32 36 45:5:60];
for ii = 1 : length(x0) - 1
fee( x>x0(ii) & x<=x0(ii+1) ) = y0(ii);
endif max(x(:)) > 1000
fee( x>x0(end) ) = ( x(x>x0(end)) - 1000 ) / 20 + 60;end
2樓:
建議你這麼寫:
fee=zeros(size(x));
fee(x>0&x<=300) = 20;
fee(x>300&x<=350) = 24;
... % 諸如此類
fee(x>1000) = (x(x>1000)-1000)/20+60;
然後你就可以一句一句地檢視每個區間的執**況了。
matlab中這個簡單的函式為什麼執行不出呢???
3樓:韓得雄
你好 你要注意matlab是基於矩陣的運算你可能疏忽了 ,這裡應該有點乘 .
把 y=(0.52+0.002599*x^2)/(1-000718*x^2);
改成:y=(0.52+0.002599*x.^2)./(1-000718*x.^2);
就可以了 :請以後注意,如果你是要做點乘運算 要加. 表示是數的運算否則 ,就是矩陣的運算了
你直接這樣算 ,是報矩陣位數不對 或者超出的錯誤要注意細節
4樓:南冥飛鳥
改成:x=[5:10:30];
y=(0.52+0.002599*x.^2)./(1-000718*x.^2);
plot(x,y);
即可。對於陣列間的乘除和冪,都要在相應的運算子號前加個 . (如*改成 .*)才行,表示陣列的元素一一對應的進行運算。
5樓:
把" ^,*,/ "前面都加上點".^ .* ./"
為什麼我的matlab程式可以輸出所有計算值? 求只輸出最後結果的方法。
6樓:理工小彭
在不需要值輸出的語句後面加一個分號就行了,在程式設計時要習慣於加分號。
7樓:牛得天下
那是因為你這些變數或者常量後面沒加封號「;」。
你加了就不顯示了
比如說要這樣:
h=(b-a)/n;
i=1;
x=a+h;
y=x^2*h;
8樓:匿名使用者
那是因為你這些變數或者常量後面沒加封號「;」。
請問怎麼用matlab畫這個函式的幅頻特性曲線和相頻特性曲線
如下參考 2.給出控制元件頂點的xy座標內,如下圖所示容。3.定義引數t的點列,定義xx和yy為0,分別求儲存和計算得到的bezier曲線對應的x座標和y座標的極板值。4.計算對應點列中bezier曲線的值。根據貝塞爾曲線公式。5.繪製貝塞爾曲線,相應的控制多邊形和控制頂點。6.繪製的函式圖如下圖所...
為什麼這個式子sin是偶函式,為什麼cos的不是偶函式,sin的是偶函式?
這個不是偶函式吧,比如x等於 6和 6時的值是不等的,所以不是偶函式,當然也不是奇函式,x等於0是函式值不為0。之所以sinx是奇函式而那個函式不是,是因為那個函式是在sinx上做了平移縮放,與sinx已經不是同一個函式了。這個是非奇非偶函式,搞錯了 為什麼cos的不是偶函式,sin的是偶函式?簡單...
matlab中的sim函式的返回值是什麼
sim命令能是使用者在matlab命令視窗或者是m檔案中執行有simulink建立的模型。這是 的命令內。我也是剛剛接觸 容simulink 正在學習當中。simulink命令有三種呼叫格式 t,x,y sim modelname 利用對話方塊引數進行 返回輸出矩陣。t,x,y sim model ...