MATLABでヤコビアン行列を求めるプログラムを組みたいのですが、MATLAB初心者のため、どうしても変数を指定するところから先に進むことができません。
変数V(1)…V(10)、Y(1,1)…Y(10,10)には、本当は数値を入れたいのですが、シンボリック式でないとヤコビアン行列は扱えないようなので、symsで上の変数をシンボリック化したいと思っています。
上のように…と省略しているように、変数を指定する際、V(1)…V(10)の10個とY(1,1)…Y(10,10)の10×10=100個を羅列せずに省略して書く方法はありませんか?
どなたか分かる方よろしくお願い致します。
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
単に
Vと書けば
V(1)…V(10)
と同じことになります。
要素を指定する時は
V(5)
すべての要素を与える時は
V=[0 1 2 3 4 5 6 7 8 9]
Yのすべての要素に値を入れる時は
Y=[0 1 2 3 4 5 6 7 8 9 ; 1 2 3 4 5 6 7 8 9 0 ; ...
2 3 4 5 6 7 8 9 0 1 ; 3 4 5 6 7 8 9 0 1 2 ; ...
4 5 6 7 8 9 0 1 2 3 ; 5 6 7 8 9 0 1 2 3 4 ; ...
6 7 8 9 0 1 2 3 4 5 ; 7 8 9 0 1 2 3 4 5 6 ; ...
8 9 0 1 2 3 4 5 6 7 ; 9 0 1 2 3 4 5 6 7 8 ]
Yの2行目だけに値を入れる時は
Y(2,:)= [1 2 3 4 5 6 7 8 9 0]
Yの3列目だけに値を入れる時は
Y(:,3)=[2;3;4;5;6;7;8;9;0;1]
といった具合に与えればいいかと思います。
早速のご回答ありがとうございます。
まだ「インデックスが行列の次元を超えています。」
と出てしまうのは、どうやらまた別のところに問題があるということですね。。
もう少し、考えてみます。
どうもありがとうございました。
No.2
- 回答日時:
>「インデックスが行列の次元を超えています。
」V(1),V(2),…,V(10)に対して
V(11)やV(12)を指定したり
Y(11,5)とか、Y(3,12)などを指定したとき
のエラーですね。
この回答への補足
昨日ご指摘いただいたところを考慮して、再びプログラムを組んでみたのですが、なぜかまだエラーがでてしまいます。
syms V Y d t
P=[V(1)^2*Y(1,1)*cos(-t(1,1)) + V(1)*V(5)*Y(1,5)*cos(d(1)-d(5)-t(1,5));1];
本当はもっとPは長いのですが、↑のような短い簡単なものにしてみても
??? インデックスが行列の次元を超えています
というエラーが出てしまうのですが、いったい原因は何なのでしょうか?
度重なる質問、本当にすみません。
No.3
- 回答日時:
>syms V Y d t
>P=[V(1)^2*Y(1,1)*cos(-t(1,1)) +
>V(1)*V(5)*Y(1,5)*cos(d(1)-d(5)-t(1,5));1];
>本当はもっとPは長いのですが、↑のような短い簡単なものにしてみても
>??? インデックスが行列の次元を超えています
>というエラーが出てしまうのですが、いったい原因は何なのでしょうか?
Pは1行2列の行列ですか?
d,tおよびPの行列のサイズが書いてないので回答しかねます。
式は簡略化して頂いていいですが、VやYのように行と列のサイズを書いてください。
またエラー行を書いていただけませんか?(式は簡略化しても良いですが、エラー原因の行と列指定の箇所は省略しないで下さい。)
つまり、こちらでMatlabを使ってエラー発生が再現できず、エラー原因の調査ができません。
行列の行と列が正確に定義できていないことが考えられます。
なお、Matlabでは長い式は行末に「...」(3ドット)を付ければ次行に継続できます。
度々すみません。。
Pは1行2列の行列です。
V,dは1行10列でY,tは10行10列の行列です。
エラーは
P=[V(2)^2*Y(2,2)*cos(-t(2,2))...
+ V(2)*V(4)*Y(2,4)*cos(d(2)-d(4)-t(2,4)),1];
の行に出ています。
ご指摘いただいた通り、行列の行と列が定義できてないことが原因だと思います。
例えば、symsでVを記号と定義しているので、それだけでPの中ではV(2)やV(4)を使って良いのだと勘違いしてしまい、V,d,Y,tの行列のサイズを定義していませんでした。
こういった場合でも、行列のサイズの定義は必要ということですよね?
No.4
- 回答日時:
>エラーは
>P=[V(2)^2*Y(2,2)*cos(-t(2,2))...
>+ V(2)*V(4)*Y(2,4)*cos(d(2)-d(4)-t(2,4)),1];
>の行に出ています。
行の終わりの「;」を通り除いて実行した時、
すべての行列要素の値が表示されるか確認してみてください。
そうすれば行列が定義できているか確認できますよ。
>ご指摘いただいた通り、行列の行と列が定義できてないことが原因だと思います。
Pの式の前に行列要素をすべて与えてからPの式の計算をしてみましたが
エラーは出ませんでした。行列要素のすべても定義されていました。
clear
V=[2:2:20]
Y=[1:10 ; 11:20 ; 21:30 ; 31:40 ; 41:50 ; 51:60 ; 61:70 ; ...
71:80 ; 81:90 ; 91:100]
d=[1:10]
P=[1:2]
t=100-Y
P=…
質問ですが
>syms V Y d t
この行は受け付けなくてエラーになります。
関数として「V Y d t」を与えて見えるのですか?
行列が定義できていなければ「P=…」の式がエラーになりますね。
行の終わりの;を取り除いて実行してみたのですが、エラーが出てしまいます。。
syms V Y d t
はV Y d tに数値を入れるのではなく、記号とみなす(シンボリック化)という命令なので、実際に値を与えてから計算するという方法では困ってしまうのです。。
この記号化の後に行おうと思っているヤコビアン行列を求める関数では、実際の数値ではなく記号化したものしか扱えないとマニュアルに載っていたもので。。
どうもすみません。
もし、なにか良い解決方法がございましたら教えていただけると助かります。
よろしくお願いいたします。
No.5
- 回答日時:
以下を参考にしてはどうでしょうか。
http://dl.cybernet.co.jp/matlab/support/manual/r …
Symbolic Math Toolboxの説明があります。
ヤコビアンについても
Symbolic Math Toolboxの使用
計算
微分
のなかで具体的な例が示されています。
その後に、具体的な数値による行列へ
subs コマンドをつかって変換してはどうでしょうか。
Symbolic Math Toolboxを使うと、
MatlabでもMaple(そのものズバリか?)やMathmaticaの様なことができるのですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 統計学 t分布導出時のヤコビ行列式について教えて下さい。 1 2022/07/04 21:36
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) セルを数式で指定する方法 5 2022/04/13 16:55
- Visual Basic(VBA) VBAで、特定の文字より後を削除して残った数値を文字列に変換と特定の文字より前も削除したい 3 2022/04/15 19:21
- Visual Basic(VBA) Excel のユーザー定義関数でソルバーが動作しない 1 2022/09/05 19:51
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- Excel(エクセル) エクセルでエラーを無視して一番左側のセルの値を返したい 2 2023/07/27 13:06
- 数学 線形代数 正則 階数 3 2023/03/22 07:52
- Excel(エクセル) 列を挿入しても式の一部を固定するには 6 2023/05/31 21:57
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
エクセル関数を教えてください
-
String""から型'Double'への変...
-
お助けください!VBAのファイル...
-
VBAでfunctionを利用しようとし...
-
インポート時のエラー「データ...
-
マクロで"#N/A"のエラー行を削...
-
ApplicationとWorksheetFunctio...
-
VBA データ(特定値)のある最...
-
実行時エラー 438 の解決策をお...
-
【VB.NET】 パワポ操作を非表示で
-
文字列内で括弧を使うには
-
ASPで、変数名に、変数を入れら...
-
マクロの「SaveAs」でエラーが...
-
VBスクリプトでIEの404 not fou...
-
変数にするとエラーになる理由は?
-
「実行時エラー '3167' レコー...
-
実行時エラー'-2147467259(8000...
-
【VBA】ワークブックを開く時に...
-
ACCESSで値を代入できないとは?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
String""から型'Double'への変...
-
VBAでfunctionを利用しようとし...
-
お助けください!VBAのファイル...
-
文字列内で括弧を使うには
-
実行時エラー 438 の解決策をお...
-
マクロで"#N/A"のエラー行を削...
-
On ErrorでエラーNoが0
-
エクセルVBA 「On Error GoTo...
-
VBA データ(特定値)のある最...
-
実行時エラー'-2147467259(8000...
-
【VBA】ワークブックを開く時に...
-
VBでSQL文のUPDATE構文を使った...
-
ACCESSで値を代入できないとは?
-
マクロの「SaveAs」でエラーが...
-
Excel vbaについての質問
-
インポート時のエラー「データ...
-
Filter関数を用いた結果、何も...
-
「実行時エラー '3167' レコー...
-
バッチファイルで、あるスクリ...
おすすめ情報