2017-05-27 4 views
0

次のコードで何が問題なのか教えていただけますか?
nを計算しているときに行列の行列の誤差が表示されるのはなぜですか?

function [n]=calculate_n(p,delta) 
    e = 1.6*power(10,-19); 
    k = 1.38*power(10,-23); 
    T = 298; 

    co = 3.25*power(10,13)*e*power(10,4); 

    er=12.5; 
    eo=1.0; 
    Nv=3*power(10,13); 

    us = log((p*e)/sqrt(2*k*T*er*eo*Nv))*2*k*T; 
    tmp = delta+(e*e*p)/co+us; 
    n = 1/(exp((tmp))+1); 
end 


のnを計算しながら、私は、マトリックス寸法誤差を取得しています。私を助けてください。

発信者:

e = 1.6*power(10,-19); 
x = logspace(13,18); 
y=calculate_n(x,0.2*e); 
semilogx(x,y,'-s'); 
grid on; 
+0

pまたはデルタベクトルはありますか? p = 0.5とdelta = 2の場合は、私にとってはうまくいっています... –

+0

私は呼び出し元コードを追加しました。 –

+0

'n = 1 /(exp((tmp))+ 1);を' n = 1 ./(exp(tmp)+1) 'に置き換えてください; ' - しかし、' tmp'はこれらの値'exp(tmp)'は常に1になります。また、tmpの前後に余分な括弧があります。 –

答えて

1

だけn = 1./(exp(tmp)+1);n = 1/(exp((tmp))+1);を交換してください。しかし、tmpは、これらの値が小さすぎるため、exp(tmp)は常に1になります。また、余分な括弧がtmpの周りにあるため、正しく配置しているかどうかを確認してください。

編集: 理由はA/B試みは、あなたが望んだものではありません線形方程式系xためA*x = Bを解決することです。両方の変数が同じ数の列を持つ必要があるため、エラーが発生しました。 A./Bは、あなたが望む要素ごとの行列分割を実行します。ただし、ABが単数の場合A/B = A./Bです。詳細は、documentationを参照してください。

+1

現在、あなたは解を提供しますが、説明はありません。 IMHO、良い答えは何かを教えてください。 '/'と '。/'の違いを簡単に説明すると、 '/'は行列の次元の誤差を引き起こすのはなぜですか? (免責事項:私はほとんどMATLABについて考えていません) – honk

+0

@honkあなたは正しいです、私の最高の仕事ではありません。それを編集するか、受け入れられた答えを編集しているのですか? –

+0

ソリューションを完全に変更しない場合は、問題はありません。あなたの投稿を改善することはいつでも歓迎です! – honk

関連する問題