MATLABプログラミング 質問箱 その2
- 1 :デフォルトの名無しさん:2006/11/10(金) 11:28:22
- MATLAB 日本語版
http://www.cybernet.co.jp/matlab/
MATLAB 本家
http://www.mathworks.com/
Yahoo MATLAB
http://dir.yahoo.co.jp/Science/Mathematics/Software/MATLAB/
MATLAB入門
http://feedback.mech.fukui-u.ac.jp/matlab/matlab0.htm
MATLAB チュートリアル
http://www-isys.eei.metro-u.ac.jp/~sho/pub/ttmatlab/Index.html
- 697 :MATLAB初心者:2008/08/23(土) 12:12:11
- 申し訳ございません。
上記のレスで左から切り出していたというのは誤りで、右から切り出しておりました。
- 698 :デフォルトの名無しさん:2008/08/23(土) 14:51:58
- >>697
ttp://dl.cybernet.co.jp/matlab/support/manual/r13/toolbox/matlab/ref/?/matlab/support/manual/r13/toolbox/matlab/ref/sprintf.shtml
- 699 :MATLAB初心者:2008/08/23(土) 15:46:04
- >>698
ありがとうございます。
大変申し訳ございません。私には、このページではsprintfでたとえば”1”を”00001”と定義する方法が理解できませんでした。
整数を5桁で表して、それを文字型にnum2strか何かで文字列に変換するようなことができるということでしょうか?
私の思い付きではstrcatをつかって696に書いたような力技で書く以外に方法がわかりません。
お手数をおかけしますが、ご教示いただいたページのどれを使用すればよいか教えていただけませんでしょうか?
- 700 :デフォルトの名無しさん:2008/08/23(土) 16:25:44
- >>699
printf フォーマット
でぐぐればいろいろ解説があるよ。
C言語が元だけど自由度がかなり高いから覚えとくとよい
↓とりあえず解決策
str=sprintf('%05d',i)
- 701 :MATLAB初心者:2008/08/23(土) 16:35:09
- >>700
取り合えずというか、そのものずばり私の欲しかった回答を書いていただいて、感謝の限りです。
お忙しい中、どうもありがとうございました。
これからも精進いたします。
- 702 :675:2008/08/26(火) 03:23:35
- A = [1 1 2 1 3 4 5 1 1 2 3 6]
みたいなベクトルがあって、[1 2] のある位置を知るのに、
for ループを使わずにすむ方法ってありますか?
matlab ならありそうな気がするのですが
B = [0 1 0 0 0 0 0 0 1 0 0]
が返ってほしい。
- 703 :デフォルトの名無しさん:2008/08/27(水) 10:05:55
- findじゃだめ?
- 704 :デフォルトの名無しさん:2008/08/28(木) 08:09:50
- 俺の力じゃ5行が限界だった
x=find(A==1);
y=find(A==2)-1;
z=intersect(x,y);
B=zeros(1,length(A));
B(z)=1;
もっと簡単なのきぼん
- 705 :デフォルトの名無しさん:2008/08/28(木) 22:26:43
- 面白そうなので参加
((A(1:length(A)-1)+A(2:length(A))).*(A(1:length(A)-1)==1))==3
正の値で且つ後ろ一つは無視する前提
一般性があるかどうかは知らない
- 706 :デフォルトの名無しさん:2008/08/28(木) 22:38:40
- size(A)も使ってみよう
- 707 :デフォルトの名無しさん:2008/08/29(金) 01:15:31
- A(1:end-1)==1&A(2:end)==2
レベル低いなあ。
こんなのすらすっと出てこないってことは
よっぽど効率悪いコード書いてるんだろうなお前ら。
- 708 :デフォルトの名無しさん:2008/08/29(金) 01:40:14
- 煽るのは構わんがそれ全部ゼロになるぞ
- 709 :デフォルトの名無しさん:2008/08/29(金) 01:46:06
- って1ズラしてるか
スマン
- 710 :デフォルトの名無しさん:2008/08/29(金) 09:07:52
- MATLABの関数自体のコードを読んでみると
勉強になるんだけどな。
- 711 :デフォルトの名無しさん:2008/09/04(木) 13:25:51
- 質問です。
MATLAB上で画像処理をする際に
画像のある画素(座標)を保存して
さらにその保存した座標のx方向成分だけ読み出すには
どういったコマンドを入力すればいいんですか?
- 712 :デフォルトの名無しさん:2008/09/04(木) 13:42:08
- >>711
まず入門サイトでも読んだ方がはやくね?ってかはやい
- 713 :デフォルトの名無しさん:2008/09/04(木) 16:05:56
- 2008からオブジェクト指向が充実したみたいで、
それについて詳しく解説してある本を知っていたら
誰か紹介していただけないでしょうか。
よろしくお願いします
- 714 :デフォルトの名無しさん:2008/09/08(月) 12:56:09
- 誰か、MATLAB(2007b)で3次元の楕円球体の描き方教えてください。
- 715 :デフォルトの名無しさん:2008/09/08(月) 18:24:34
- 定義したい変数名を、文字列を使って定義することは可能なのでしょうか?
例えば、
Data1 = 1;
Data2 = 2;
・
・
・
Data30 = 30;
と30個の変数を定義したいとき、for文を使って定義することは可能でしょうか?
- 716 :デフォルトの名無しさん:2008/09/08(月) 23:43:57
- >>714
キーワードを英語でlookforするくらいはしようよ。
>>715
help eval
- 717 :デフォルトの名無しさん:2008/09/09(火) 11:36:43
- はじめまして、今matlabの勉強をしている者です。
matlabのエディットウィンドウで、文字の挿入ってどうやるんですか?
現状では入力してある行に文字を挿入すると後ろの文字が消えてしまい、
全文入力し直しになってしまうのです、これをwordなどみたいに
文字を挿入したら、文が自動で後ろに移動してくれるようにできないですか?
また、同様にスペースキーも文字間のスペースをあけてくれず
文字を消してしまうのですが?どうしたらいいですか?
OSは vinelinux4
matalab v7.0.1 SP1です
- 718 :デフォルトの名無しさん:2008/09/09(火) 22:12:45
- MATLABっていうか
キーボードのinsert
- 719 :デフォルトの名無しさん:2008/09/10(水) 13:58:00
- GUIを作成して、
ボタンを押すとシミュレーションが実行するようにしたんですが、
GUIなしでコマンドから直接実行した場合だと160秒くらいで終わるのに、
なぜかGUIからだと260秒もかかるんですが、
なんでこんなにかかると思いますか?
やってることはまったく変わらないですが・・・。
- 720 :133.43.185.64 :2008/09/10(水) 21:20:24
- >>719
全然見当がつかん。
プロファイラを実行した状態で GUI 経由でシミュレーションを行って、
時間のかかっている箇所を割り出してから相談してもらった方がよいと思われ。
- 721 :デフォルトの名無しさん:2008/09/11(木) 00:44:20
- >>720
アドバイスありがとう。
実はこういう経験あまりしてなかったんで、
プロファイラとか使ったことなかったんです。
ちょっと調べて割り出してみます。
- 722 :初心者:2008/09/11(木) 01:43:15
- 非常に低レベルなことで申し訳ないのですが、
Cでいうポインタのような概念はMatlabにはないのでしょうか?
- 723 :デフォルトの名無しさん:2008/09/11(木) 01:54:01
- >>722
ないはずだよ
wikipediaにも書いてある
まあ、google codeとかmatlab centralで検索すれば
自作のポインタ関数出て来ても可笑しくないけど
- 724 :デフォルトの名無しさん:2008/09/11(木) 02:15:40
- >>722
デフォはポインタ
渡された変数を編集しようとした時点でコピーが始まる
- 725 :デフォルトの名無しさん:2008/09/11(木) 06:15:09
- >>722
何をしたいのかをはっきりさせて
それをMATLABではどうやるのか、と考える方がいいよ。
他の言語のやり方をそのまま持って来ようとしても
そうは行かない場合は多い。MATLABに限らず。
- 726 :デフォルトの名無しさん:2008/09/14(日) 02:33:41
- 質問です。
例えば
3,6,4,5,2
4,15,7,5,3
6,4,4,7,3
のような行列があってノイズで15だけ値が大きい場合には、
それを周りの数字に近い値に矯正(たしか平滑?)するにはどうすればいいですか?
自分が知ってるやり方だと、ノイズも含め全ての成分が平均化されてしまいます。
どうにかノイズ以外はそのままの値で、ノイズ部分だけを周りの値に馴染ませたいんです。
- 727 :デフォルトの名無しさん:2008/09/14(日) 02:59:50
- 10はノイズ? 13はノイズ?
15を適当に5とかにしたら「馴染んだ」ことになるの?
自分が何をやりたいかをまずは具体的にする。
君以外にそれがわかる人はここにはいないよ。
- 728 :デフォルトの名無しさん:2008/09/14(日) 07:57:32
- 実験データの改竄捏造でもしたいのかなw
- 729 :デフォルトの名無しさん:2008/09/14(日) 12:03:36
- >>726
if ノイズ
平滑
else
なにもしない
- 730 :デフォルトの名無しさん:2008/09/15(月) 07:18:58
- ああ
- 731 :デフォルトの名無しさん:2008/09/15(月) 13:38:27
- >>726
新しいやり方を考えればいいだけ。
- 732 :デフォルトの名無しさん:2008/09/17(水) 23:20:14
- 質問です。
Cのプログラム等に記載するための離散時間系のデジタル1次ローパスフィルタを作るためにMATLABでフィルタの係数を求めようとしています。
そのためのプログラムとして、サンプリングインターバル=6ms、フィルタ周波数=10Hzとして、
omega = 2 * pi * 10
T = 1 / omega
sys = tf(1, [T, 1])
[num, den] = tfdata(sys)
[numd, dend] = c2dm(num, den, 0.006)
として求めると、y[n] = 0.6859 * y[n-1] + (1 - 0.6859) * x[n]という式が求められます。
一方で、連続時間系の1次ローパスフィルタの伝達関数(サンプリングインターバル=6ms、フィルタ周波数=10Hz) G(s) = 1 / (1+Ts) を手計算でz変換を行い、離散系のローパスフィルタの式を求めると、(T = 1 / omega、omega = 2 * pi * 10)
y[n] = 1 / (1+omega*0.006) * y[n-1] + (1 - 1 / (1+omega*0.006)) * x[n]
となるため、値を代入すると、
y[n] = 0.7263 * y[n-1] + (1 – 0.7263) * x[n]
となり、先ほどMATLAB関数から求めた式と乖離が出てきてしまいました。
そこで、有識者の方々にお聞きしたいのは
1.そもそも上記のデジタル1次ローパスフィルタの作り方は間違っているのか?
2.c2dm コマンドの中身がよくわからないが、これは計算誤差が出るようなものなのか?
3.離散系に変換したシステムのボード線図を見て特性を確認したいのだが、その場合
も連続系と同じく
bode(numd, dend)
でよいのか?
長文となってしまい、見にくくて申し訳ありませんがどなたか有識者の方がいらっしゃればご教授ください。
- 733 :デフォルトの名無しさん:2008/09/18(木) 14:54:34
- 簡単な計算ミスのような気もするのですが、、、
- 734 :デフォルトの名無しさん:2008/09/18(木) 22:11:28
- >>733
と言いますと・・・?
- 735 :デフォルトの名無しさん:2008/09/18(木) 22:13:54
- 周波数とインターバル(周期)とで混乱していない?
間違いを探したいのなら、
他の数字の組み合わせにしてみて、計算してみるのはどうでしょう?
- 736 :デフォルトの名無しさん:2008/09/18(木) 23:19:11
- >>735
すいません、だいぶ他の数字でもやってみたのですが・・・
基本的な結果としては、低周波(0.01Hz、1Hz)では値の乖離はほとんど見られないのですが、高周波になればなるほどどんどん値が離れていくということになっています・・・
なので、アナログからデジタルに変換するときの計算誤差なのではと思った次第なのですが・・・
MATLAB計算値 手計算値
0.01Hz 0.9996 0.9996
0.5Hz 0.9813 0.9815
5Hz 0.8282 0.8414
10Hz 0.6859 0.7260
どなたかご教授いただけると助かります
- 737 :デフォルトの名無しさん:2008/09/18(木) 23:34:44
- >>736
サンプリングインターバルも変えてみたらどう?
- 738 :デフォルトの名無しさん:2008/09/19(金) 00:13:17
- 変えてみた結果は以下の通りになりました。
MATLAB計算値 手計算値
0.5Hz 12msec 0.9630 0.9637
2Hz 24msec 0.7396 0.7683
0.01Hz 480msec 0.9703 0.9707
10Hz 480msec 0.0000 0.0032
という感じで、サンプリングインターバルが大きくなる、もしくは周波数が大きくなると乖離がどんどん大きくなるといった傾向が見られます。
そこで離散系に直したときのボード線図を見て、連続系のそれとの特性の違いを見たいのですが、離散系に直したシステム
[numd, dend] = c2dm(num, den, 0.006)
bode(numd, dend)
という見方でよろしいのでしょうか?明らかに異なった波形が出てくるので、離散系の場合はボード線図を違う見方で見なければいけないのかなと予想しているのですが。。。
見方がわかりませんので、もしご存知でしたら教えてください。
- 739 :デフォルトの名無しさん:2008/09/19(金) 00:33:01
-
ttp://www.ikko.k.hosei.ac.jp/joomla1506/matlab-topmenu-33/17-matlab20070307.html
- 740 :デフォルトの名無しさん:2008/09/23(火) 00:35:38
- matlabをはじめたばかりなんですが質問です。
stem3でつくったグラフを等高線のグラフにそのまま変えたいのですが、
どなたかわかる方いらっしゃいましたらお願いします。
- 741 :デフォルトの名無しさん:2008/09/23(火) 02:50:24
- ステムを輪切りにして上から見て、意味あるの?
- 742 :デフォルトの名無しさん:2008/09/23(火) 11:49:33
- >741
値がどのように分布しているか等高線の方がわかりやすいと思い
変えたいのですが。
- 743 :デフォルトの名無しさん:2008/09/23(火) 15:11:34
- >>742
matlab 等高線
でぐぐれ
- 744 :デフォルトの名無しさん:2008/09/30(火) 15:46:00
- GUIのプログラムについての質問です
ファイルguimain.m内で
handles.a=1;
guidata(hObject, handles);
とhandles.aを設定したとき
別のファイルgui2.m内で
handles.aを編集する方法はあるのでしょうか
function gui2(hObject,handles)
handles.a=2;
guidata(hObject, handles);
ではできませんよね?
- 745 :デフォルトの名無しさん:2008/09/30(火) 16:32:46
- 効率はわかりませんが
function out = gui2(handles)
handles.a=2;
out = handles;
として、呼び出し側でguidata(hObject, handles); することで解決しました。
- 746 :t:2008/10/07(火) 19:46:19
- ベルヌーイの螺旋を描ける方いらっしゃいませんか?
困っています。
189 KB
[ 2ちゃんねる 3億PV/日をささえる レンタルサーバー \877/2TB/100Mbps]
取りに行ったけどなかった。次は一時間後に取りに行くです。新着レスの表示
掲示板に戻る
全部
前100
次100
最新50
read.cgi ver 05.0.7.8 2008/09/25 アクチョン仮面 ★
FOX ★ DSO(Dynamic Shared Object)