- ベストアンサー
Matlabによる一次方程式のグラフ表示
matlab初心者です。 x1 + x2 = 15 x1 + x2 = 7 x1 >= 0, x2 >= 0 を、縦軸x2, 横軸x1によるグラフ表示したいです。 しかし、matlabにこのまま何も考えずに打ち込むと、x2が定義されていない、x1が定義されていないなどと出ます。 どのようなやり方をすればいいのでしょうか。 よろしければ、実際に打ち込むコマンドを示していただけないでしょうか。 お願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
この手の質問で見かけるたびに疑問に思うんですが、 「matlab初心者です。」 と書くことでどんなメリットがあるんですかね? デメリットしかない気がするんですが… というのはまあ置いといて。 プログラムってのはあなたがおもっている以上に厳密に変数を定義してやる必要があります。 例えば x1 >= 0, x2 >= 0 は「x1は0以上、x2も0以上」ということでしょうが、じゃあ最大はどこまでなんでしょう?まさか無限大ではないですよね? x1 + x2 = 15 x1 + x2 = 7 で決まるじゃないか!と思うかも知れませんが、それを決めるのはあなたであってプログラムではありません。 そもそもmatlabでの=って等号ではなく、代入なんですよね。そうなるとこの式は「x1+x2に15を代入」ってことなんで、 よくわからないですね。もしこれをx2=-x1+15とすると「x2に-x1+15を代入」という意味になりますが、これでもやっぱり x1が何者かを決めてやらないといけないですよね。 ということで、ここから取れるアプローチは2つあります。 1.手計算で解けるところまで解いてから改めてプログラムを書く まずこの式解けますよね?x1の範囲もx2の範囲も、x1-x2平面でどの座標を通るかも全て計算できます。 全部計算してからプログラムに書きこむのが一番早いかと。 2.何がなんでもプログラムに考えさせたい x1とx2の組みをとにかくたくさん用意(rand関数とか。0以上は当然としていくつ以下かは適切に決める必要があります)して、 そのうち x1 + x2 = 15 x1 + x2 = 7 を満たすx1、x2の組み合わせだけを抽出する、というやり方です。 明らかにこっちの方がめんどくさいですけど。 参考になれば幸いです。
その他の回答 (1)
- Kules
- ベストアンサー率47% (292/619)
再びKulesです。 >わかりやすい回答を期待するのと、「ググれ」という冷たい回答を避けたい、というのが私の場合ですね。 個人的には「初心者です」発言をしている人にほど「ググれ」とか「ヘルプ読め」とか「Matlabハンドブック読め」って 言いたくなるんですよね。 また、わかりやすい回答を…とのことですが、これまた個人的には回答として「わかりやすい言葉、表現を使う」か 「ある程度専門的な言葉を使う(一つ一つの関数に対する補足説明などをしない)」かは取り組んでいる問題の 難易度で判断します。要は「このぐらいの問題に取り組んでいるということはこの辺のことはわかってるよね」というか。 ですので、「初心者です」と言っている人がちょっとしたところで勘違いをしているような質問であればなるべく平易な言葉や表現で回答しますし、 逆に「初心者です」と言ってる人がめっちゃ難しい問題を丸投げのように質問してたら「お前にはまだ早い」って言いたくなります(言いませんけど)。課題か何かなんだろうけど、あきらめた方がいいんじゃないかなあと。 そういった視点でこの問題を見ると、「そもそもhelpについてる例もMatlabの本も、おそらく他の言語もやっていない人なんだろうな」と私は今回判断しました(違ってたらすみません。少なくとも何らかの言語を学んでいる人が左辺に未定義の変数を2つある式をそのまま打ち込むというのは考えにくかったので)。つまり「ホントの初心者」だろうと。 とりあえずアドバイスとしては、 ・安いのでもいいからMatlabハンドブックみたいなのを書店で買って来る ・そこに書かれているプログラムをそっくりそのまま書いてみて実行してみる ・パラメータとか適当に変えてみて実行してみる。エラーが出たら何で出るのか考える とかをするのがいいんじゃないかと。いきなりネット上で見つかる「Matlab Tips」みたいなのを見てもかえってわからなくなると思うので。 (Matlabに関しては、演習問題付きの教則本みたいなものがなかなかないのがイタイとこなんですよね~そういうものを見つけたらみんなに薦めたいところなんですが) お気を悪くされたらすみません。 参考になれば幸いです。
お礼
私は少しならc言語なら触ったことはあります。ただ、cの場合、中身を入れなくても不定として動いてくれるので、もしかしたらMatlabもそんな方法があるのではないのかと思っていました。Kulesのお気持ちも文章を読むことで、私も思ったことがある!という点がいくつもありました。丁寧な回答及び、助言ありがとうございました。
お礼
わかりやすい回答を期待するのと、「ググれ」という冷たい回答を避けたい、というのが私の場合ですね。 手計算するしかないのですね。面倒と思ってしまって、どうにか方法が無いものか考えておりました。ありがとうございました。