• 締切済み

※緊急です

MATLAB Simulinkについて質問です。 初期値の設定の仕方がわからず困っています。 図のようなMATLAB Functionブロックで、以下の式であらわされるあるシステムの状態・出力を計算したいと思っています。 そこで、計算毎に状態の計算結果をブロックから出力し、そのままフィードバックしてブロックに入力しなおして次回の状態の計算に用いたいんですが、状態の初期値を設定していないためコンパイル時にエラーが出てしまいます。 どうすればいいでしょう? システムの状態・出力方程式↓ x(k+1)=Ax(k)+Bu(k); y(k)=Cx(k)+Du(k); x(k):現在のシステムの状態(図の中ではxと表記) x(k+1):次のシステムの状態(図の中ではx_nextと表記) y(k):現在のシステムの出力(図の中ではyと表記) A,B,C,D:ある定数パラメータ

みんなの回答

  • DCI4
  • ベストアンサー率29% (448/1540)
回答No.1

状態の初期値を設定していないためコンパイル時にエラーが出てしまいます。 →なんのエラーかわからん ??? ★回答 作成の指針 一例 システムの状態・出力方程式 のシステム関数を書き出す ステップ1> 動いている  以下参照 fxpdemo_series_cascade_form.mdl http://jp.mathworks.com/help/fixedpoint/examples/fixed-point-series-cascade-form-filter.html 動作を確認する 動いている ステップ2> このシグナルブロックを原本に いらない部分を書き換え消す 動作を確認 ステップ3> 動作確認後の 上記の必要な部分を Functionブロックにするため プログラミング作業をする Functionブロック http://jp.mathworks.com/help/simulink/ug/creating-an-example-model-that-uses-a-matlab-function-block.html を参考に書き換えコンパイル 。。。。。おわり。。。。。。。。。。。。。。。。。。。。 ただし シムリンクに十分な登録あるし Functionブロック作成のコンパイルには精通してない MATLAB Function ブロックを構築するには、サポートされているコンパイラが必要です MATLAB Function ブロックを使用するモデルの作成しなくても 本題は 十分高速な 簡素なブロックであると思う http://jp.mathworks.com/examples/simulink-fixed-point-designer/mw/fixedpoint_product-fxpdemo_state_space-fixed-point-state-space

関連するQ&A

  • SimulinkのCoulomb model

    Matlab simulinkのCoulomb&Visous Frictionというブロックパラメータがあるのですが、 このパラメータの意味が分かりません。 解説には以下のように書いてあるのですが、デフォルトパラメータが [1 3 2 0] 粘性係数(ゲイン) 1 とあるのですが、この意味が良く分からないのです。 解説は以下にあるのですが、摩擦係数がどこに入るのかとか、粘性係数がどこに入るのかとか判りません。この関数は単に係数だけで前段でゲインで入れるならそうしますが、ピンと来ません。 ご存知の方いらっしゃいましたら、お手数ですがお教え願えないでしょうか?よろしくお願いいたします。 ********************************** Coulomb and Viscous Friction ブロックは、クーロン (静的) 摩擦と粘性 (動的) 摩擦のモデルを作成します。ブロックは、零点では不連続性を、それ以外では線形ゲインのモデルを作成します。 ブロック出力は、以下に対する MATLAB® の結果に一致します。 y = sign(x) .* (Gain .* abs(x) + Offset) ここで、y は出力、x は入力、Gain は非ゼロの入力値の信号ゲインであり、Offset はクーロン摩擦です。 ブロックは 1 つの入力を受け入れ、1 つの出力を生成します。入力は、要素に実数および複素数をもつスカラー、ベクトルまたは行列にできます。 http://www.mathworks.co.jp/jp/help/simulink/slref/coulombandviscousfriction.html

  • MATLAB/simulinkでのD/A変換の仕方

    現在MATLABで制御の勉強をしている大学生です。 今、デジタル制御について勉強しているのですが、MATLAB/simulinkを使いながら進めています。 MATLAB/simulinkでのD/A変換のやり方がわからなくて質問いたしました。 通常のアナログ制御の場合、 入力 → コントローラー → プラント → 出力 で多分、設計されると思うのですが、 デジタル制御の場合、 入力 → A/D変換器 → コントローラー → D/A変換器 → プラント → 出力 という流れになると聞きました。 A/D変換器はゼロ次ホールドを行うブロックがsimulinkにあったのでそれを使えばいいと思うのですが、D/A変換器を行ってくれるブロックが見当たりません。 探し方が悪いのでしょうか。。。 もしご存知であればD/A変換に相当するブロックを教えてください。 無ければ、s-functionか何かでのD/A変換のやり方を教えて頂けると助かります。 よろしくお願いします。

  • matlab 衝突のシミュレーション

    現在、Matlabで簡単な衝突のシミュレーションを行っていますが、うまくいかず、どなたがご教授ください。 【やりたいこと】 ボールを自由落下させた時の地面との衝突のシミュレーションを、 Simulinkではなく、自分で作成したmfileから実現させたい。 【質問】 以下のプログラムでodeの計算が終わらず、どのようにすればいいのか ご教授ください。 ======================= 【diff_freefall.m】 function dx = diff_freefall(t,x0) g = 9.81; % 重力 k = 1; % 反発係数 A = [0 1; 0 0]; B = [ 0; -g]; % 衝突判定 if x0(1)<=0 && x0(2)<0 x0(1) = 0; x0(2) = -k*x0(2); end dx = A * x0 + B; ======================= ======================= 【simu.m】 Ts = 0; %シミュレーション開始時間 Te = 10; %シミュレーション終了時間 y0 = [10; 15;]; %初期位置、初期速度 [T,Y] = ode45('diff_freefall',[Ts:0.1:Te],y0); subplot(2,1,1); plot(T,Y(:,1),'g'); subplot(2,1,2); plot(T,Y(:,2),'r'); ======================= 【補足】 ・以下のmathworksのサイトのサンプル(simulink版)を、mfileで記述したいです。 <http://jp.mathworks.com/help/simulink/examples/simulation-of-a-bouncing-ball_ja_JP.html> ・すべてのodeのタイプを試しましたが、ずっと終わらない、  もしくは途中でシミュレーションが止まります。 ・衝突した時に、odeの積分の累積値がクリアできていないことが原因だと思うのですが、  クリアする方法がわからず困っています。

  • SimulinkのStateflowについて

    MATLAB Simulink の Stateflow について質問させていただきます。 Stateflowを使おうと思いいろいろ調べていてわかったこととして、  ・StateflowはSimulinkブロックの中の一種  ・状態分岐をフローチャートのような形で書ける ということがありました。 しかし、そこで疑問があります。条件分岐はSimulinkでもifブロックとそれに付随するActionブロックを(複雑に)組み合わせれば実現は可能です。 その複雑な部分をStateflowで置き換えると見た目がすっきりし、構造がわかりやすいというのはよいのですが、だとするとそこでifブロックを使う意味はなんなのでしょうか? 「こういう場面はifブロック、こういう場面はStateflow」のような使い方の切り分けは存在するのでしょうか? 見た目にわかりやすいモデルをStateflowもうまく利用して作っていきたいのですが、作っているうちに上記2つの使い分けがよくわからなくなってきかけたので質問させていただきました。 (ifブロックとStateflowの使い分けの定義がよくわからないモデルになりそうな気配があったため。モデルには統一性を持たせたいです) どなたか詳しい方ご教授いただけるとありがたいです。 以上、よろしくお願いします。

  • Matlabで作成したmファイルをC言語に自動変換することは可能ですか?

    大学の研究室で使っているmatlabの機能にC言語のソースを自動生成 する機能があると先生に伺ったのですが、 常識的に考えてそんな便利なことができるとは思えません。 実際に下記に示すtoolboxで自分が作ったmファイルからC言語のソースを、ある程度自動生成することは可能でしょうか? Matlab 2008 b windows-x64版 Matlab 7.7 Simulink 7.2 Image processing toolbox Signal processing toolbox Real time workshop SimulinkとReal time workshopを一度も使ったことが無いので 少し調べて良く判らない点がありました。 Realtimeworkshopでは、Simulinkで生成したブロック線図のみC言語で出 力できるものであり、mファイルからの変換はできないのでしょうか?

  • 数的処理システムのような計算について

    初心者です。 C言語は数的処理システムのように計算結果を出力することは可能ですか? 可能ならば教えていただきたいのです。 例えば (x+y)^2を計算し、出力をx^2+2xy+y^2で表示させるようなものです。 おねがいします。

  • matlabで√の表記方法を教えてください

    matlabのtextの関数を用いて図の中に√2を表記したいのですがどうしたらいいかわかりません。教えてください

  • Mapleでグラフと点を同座標平面に出力させるには?

    度々すいません。Win2k&Maple7の環境です。 with(plots);implicitplot({y-1=1/2*x-1/2,y-1=2*x-2,y-3=-x+2},x=-5..5,y=-5..5); で3本のグラフが描けましたが、この図に更に点(2,2)も表示させたい場合にはどうすればいいのでしょうか? グラフの出力の仕方は参考書に沢山載っているのですが点の出力の仕方が載ってません。

  • 条件をみたすちょくせん

    マナーある方の回答お待ちしてます。 問題)2つの関数f(x)=-2lx-1l+1と、g(x)=k(x-3) +2(kは実数)がある。 1)・・・ 2)y=f(x)と、y=g(x)が2交点をもつとき、kの範囲を求めよ。 解説) y=g(x)=k(x-3)+2は、定点(3、2)をとおり、・・・ 下記の図(省略)より・・・ ------ こたえ・・・ -2<k<1/2 こういう問題は図を描いて答えを出す問題なのでしょうか? 確認のため回答ください。 計算で出す方法もあったらおしえてください。文系の身なので おてやわらかにお願いします。

  • プログラムを捜しています

    昔コンピューターが開発された初期にFORTRANという プログラム言語があり、たとえば 1 FOR X=1 TO 5,1 2 Y=X^2+1 3 Print Y と入力すると、Y=X^2+1をX=1から5まで 1飛びに計算して  2, 5, 10, 17, 26 と出力することができました。これに相当する 方法は現在どうすればよいのでしょうか。 教えて下さい。