プロが教えるわが家の防犯対策術!

太陽電池を式を使用して計算シミュレーションしたものと、実験したデータとを比較しようと考えています。

前に質問させていただいたときに各パラメータの求め方を教えていただいたのですが、頭ではなんとなくわかるんですが、実際やろうとするとよくわかりませんでした。

太陽電池のI-V特性のグラフを出力する機器を使用してグラフ化したものが、添付した画像です。

直列抵抗成分:Rs
並列抵抗成分:Rsh
光電流:Iph
逆方向飽和電流:Is
ダイオード因子?:n or nVt

がどのように計算して(実際の値や式など)、それぞれがどういう値になるのかを教えていただきたいです。

初歩的な質問、そして前に回答をいただいたのに申し訳ありません。

よろしくお願いします。

※添付画像が削除されました。

A 回答 (8件)

ソルバーの実行前後の結果を添付します。


実は、ここで使った実測データというのは、以下のパラメータで理論式から作ったものです。
   Iph = 0.15 A
   Rsh = 100 Ω
   Rs = 0.1 Ω
   Is = 3000 pA
   NVt = 26 mV
最小2乗による近似結果は、Rsh を除けば、真の値に近い値が得られています。Rsh が大きいときは、最小2乗による近似を行っても、精度の高い値が得られないことに注意してください。
「太陽電池を式を使用して計算シミュレーショ」の回答画像8
    • good
    • 0
この回答へのお礼

本当に分かりやすく書いていただきどうもありがとうございました。
自分のようなものでもきれいなVIカーブを描き出すことができました。

しかし求めた結果より少しおかしいかなと思う点がありました。
少しまた分からないので、お暇であればできればそちらのほうも見ていただければと思います。
http://okwave.jp/qa/q5970407.html
図々しく質問してもうしわけありません。

本当にありがとうございます。助かりました。

お礼日時:2010/06/15 15:28

ANo.4のコードですが、1箇所、改行が抜けていました。

6行目の
Dim eps As Single, a As Single, x As Single, x0 As Single, x1 As Single eps = 1 / 10 ^ 6 ' --- 相対計算精度

Dim eps As Single, a As Single, x As Single, x0 As Single, x1 As Single

eps = 1 / 10 ^ 6 ' --- 相対計算精度
の2行に分けてください。
    • good
    • 0

ANo.2の添付図の下半分を拡大したものを添付します。

「太陽電池を式を使用して計算シミュレーショ」の回答画像6
    • good
    • 0

ANo.2のワークシート見にくいので拡大したのを添付します。

「太陽電池を式を使用して計算シミュレーショ」の回答画像5
    • good
    • 0

ANo.3のマクロコードの改行記号が抜けていました。

以下が正しいコードです。

Function I(Iph, Rsh, Rs, I0, nVt, V)
If Iph < 0 Or Rsh < 0 Or Rs < 0 Or I0 < 0 Or nVt < 0 Or V < 0 Then
I = ""
Exit Function
End If
Dim eps As Single, a As Single, x As Single, x0 As Single, x1 As Single eps = 1 / 10 ^ 6 ' --- 相対計算精度
x0 = -2 * Iph
x1 = Iph ' --- I の値を x0 から x1 の範囲で探す
I0 = I0 / 10 ^ 12 ' --- pA → A
nVt = nVt / 1000 ' --- mV → V
While Abs((x0 - x1) / (x0 + x1)) > eps
x = (x0 + x1) / 2
a = (V + x * Rs) / nVt
If a > 700 Then a = 700 ' --- exp 計算のオーバフロー防止
If Iph - (V + x * Rs) / Rsh - x - I0 * (Exp(a) - 1) > 0 Then
x0 = x
Else
x1 = x
End If
Wend
I = x
End Function
    • good
    • 0

ANo.2の続きです。



【理論式から計算されるデータを生成する方法】
(1) ワークシート上で Alt キー押しながら F8 (ファンクションキー)を押し、マクロ名のところに a を半角で記入し、「作成」をクリック
(2) 出てきた画面上の Sub a() と End Sub を消して以下のコードを貼り付ける(以下の文をコピーしペーストすればいい)
Function I(Iph, Rsh, Rs, I0, nVt, V)
If Iph < 0 Or Rsh < 0 Or Rs < 0 Or I0 < 0 Or nVt < 0 Or V < 0 Then I = "" Exit Function End If Dim eps As Single, a As Single, x As Single, x0 As Single, x1 As Single eps = 1 / 10 ^ 6 ' --- 相対計算精度
x0 = -2 * Iph
x1 = Iph ' --- I の値を x0 から x1 の範囲で探す
I0 = I0 / 10 ^ 12 ' --- pA → A
nVt = nVt / 1000 ' --- mV → V
While Abs((x0 - x1) / (x0 + x1)) > eps
x = (x0 + x1) / 2
a = (V + x * Rs) / nVt
If a > 700 Then a = 700 ' --- exp 計算のオーバフロー防止
If Iph - (V + x * Rs) / Rsh - x - I0 * (Exp(a) - 1) > 0 Then
x0 = x
Else
x1 = x
End If
Wend
I = x
End Function
(3) 貼り付けたら、 Alt キー押しながら Q を押すか、ウィンドウの×ボタンで編集画面を終了させる
(4) ワークシートに戻って、添付図の E11 のセルに=I($E$3,$E$4,$E$5,$E$6,$E$7,D11)と記入し(この式をコピー&ペースト)、Enter を押すと計算値がそのセルに表示されます。$E$3,$E$4,$E$5,$E$6,$E$7 はパラメータのあるセル位置で、D11 は電圧値のあるセル位置です。
(5)  E11 のセルをコピーして、E12 以下の、データのある行を全て選んでペーストします。これで、D列の電圧に対する計算値の表が作れます。

【セキュリティレベルの変更】
マクロを含むExcelファイルを開くとき、セキュリティレベルによってはマクロが実行できない場合があります。その場合、以下の手順でセキュリティレベルを変更してください。

新規にワークシートを作成して、左上隅の丸(Officeボタン)をクリック→下端の「Excelのオプション」を選択→左側の「セキュリティーセンター」を選択→右下の「セキュリティーセンターの設定」をクリック→左側の「マクロの設定」をクリック→「すべてのマクロを有効にする」を選択 → OK → OK → Excelの終了(保存しない)→ マクロを含むExcelファイルを開く
    • good
    • 0

ANo.1です。

Excelのソルバーを使った最小2乗近似の方法を紹介します。
以下は Excel 2007 での手順です(Excel97-2003でも可能ですが(7)の手順だけが異なります)。

【準備】
(1) 実測データを添付図のようにワークシートに貼り付ける(添付図ではB列とC列が実測データ)
(2) E3 から E7 のセルにパラメータの概略値を記入する(最後にこのパラメータを動かして実測値に近づけます)。この値の単位は D3 から D7 のセルの()に書かれているものにしてください。
(3) 実測データの右側に理論式から計算されるデータを生成する(この方法は後ろの【理論式から計算されるデータを生成する方法】に載せます)。添付図のD列はA列をそのままコピーしたもので、E列が電流の理論値です。理論値は E3 から E7 のセルの数値(青字)とD列の電圧値から計算します。
(3) 実測特性と理論特性のグラフを描く。添付図では青丸が実測値、ピンク色が理論特性です。
(4) まず、E3 から E7 のセルのパラメータの値を手動で変えて、実測特性とだいたい同じになるようにします(添付図のような近さで十分です)。光電流 Iph は短絡電流にほぼ等しいので、短絡電流の値を初期値とします。シャント抵抗は最初は 1000Ω 程度でいいです。Rs と飽和電流 Is と熱電圧 nVt (n*Vtの意味) を変えると特性が結構敏感に変わるので、これはグラフを見ながら実測特性に近くなるような数値にします(添付図の特性はqwe1232さんの質問にある発電特性を参考にしているので、だいたいこのような値でいいはずです)。なお、パラメータの単位が V や A に統一されていませんが、これは統一すると、Is などが非常に小さい数値になって、Excel のソルバーでうまく近似計算できなくなるからです。
(5) F列に実測値と理論値の電流の差の2乗の値を記入します。添付図の例では、F11 のセルに=(E11-C11)^2 と書いて、そのセルをコピーして、下の行にコピーします。
(6) F列の最後の行の下に、電流の差の2乗の総和を書きます。添付図の例では=SUM(F11:F25) と書けば計算されます。

【最小2乗近似】
(7) ソルバーアドインが有効になっていれば、ワークシートのメニューの「データ」をクリックすると、右上に「ソルバー」と出ていますので、これをクリックします。すると、添付図左下のようなウィンドウが現れるので、「目的セル」の右側の欄を(6)のセル位置とします。
(8) 「目的セル」の下にある「目標値」の右側の「最小」を選択します。
(9) 「目標値」の下の「変化させるセル」の右側の欄を、パラメータの数値のあるセル範囲(添付図の例では $E$3:$E$7)とします。(7)~(9)の設定によって、誤差の2乗が最小となるようにパラメータを振る(最小2乗近似)という動作をさせることになります。
(10) 右側の「オプション」をクリックして、その内容を添付図右下のような変更します。
  制限時間 100
  反復回数 1000
  精度~収束 0.000000000001
  「単位の自動設定」と「非負数を仮定する」にチェックを入れる
  近似方法は「2次式」、微分係数は「中央」、探索方法は「共役傾斜法」にチェックを入れる
(11) 変更したら OK → 右上の「実行」をクリックすると最小2乗近似が始まります。しばらく待つと、「解が見つかりました・・・」と出ます。このとき、ワークシート上のパラメータの値とグラフの近似曲線も変わっていますが、うまく近似されているのなら、OK をクリックします。もし、パラメータの値がムチャクチャになっていたり、近似度が足りないの場合は、近似に失敗しています。その場合は、「元の値に戻す」をチェックして OK とします(そうすれば、近似前のパラメータの値に戻ります)。データによってはうまく近似できないときもあるので、最小2乗近似前のパラメータの値を別の値に変えるなどしてください。添付図の例ではうまく近似でき、以下のようになりました。
  Iph (A)   0.148・・
  Rsh (Ω)  1058.2・・
  Rs (Ω)   0.107・・
  Is (pA)  3482.9・・
  nVt (mV) 26.2・・

文字数の制限のために、この続きは次の回答に書きます。
「太陽電池を式を使用して計算シミュレーショ」の回答画像2
    • good
    • 0

前の質問(

http://oshiete.goo.ne.jp/qa/5925855.html)で回答した者です。
実験データからパラメータを求めるには、回答No.2の添付図の式(1) と実験データを最小2乗法でカーブフィットするのが良いと思います。実験データの縦軸(電流)の単位は何ですか(A または A/cm^2)。横軸(電圧)の数字が重なってよく分かりませんが、開放電圧は 0.412V くらいでしょうか。それが分かれば最小2乗法の具体的な方法をお知らせします。Excelでできますが、ソルバーは使えますか。Excel 2007 なら、以下の手順でソルバーが使えるようにしてください。
  (1) ワークシートを開いたときの左上隅の丸記号(Office ボタン)をクリック
  (2) 下端の「Excelのオプション」をクリック
  (3) 左側の「アドイン」をクリック
  (4) 一番下の「設定」をクリック
  (5) 「ソルバーアドイン」にチェックを入れて OK をクリック
その後、(1)から(3)までやってみると、「アクティブなアプリケーションアドイン」に「ソルバーアドイン」と出ています。この状態になっていればソルバーが使えます。実験データの個々の数値の組が分かればこちらで試して見ますが。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!