<?xml version="1.0" encoding="utf-8" ?><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" 
			xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" 
			xmlns:cc="http://web.resource.org/cc/" xml:lang="ja">
<channel rdf:about="http://sach1o.blog80.fc2.com/?xml">
<title>初心者によるMATLABメモ</title>
<link>http://sach1o.blog80.fc2.com/</link>
<description>3次元形状やってんのになぜかMATLABを使わされることになった人のメモ。</description>
<dc:language>ja</dc:language>
<items>
<rdf:Seq>
<rdf:li rdf:resource="http://sach1o.blog80.fc2.com/blog-entry-101.html" />
<rdf:li rdf:resource="http://sach1o.blog80.fc2.com/blog-entry-100.html" />
<rdf:li rdf:resource="http://sach1o.blog80.fc2.com/blog-entry-99.html" />
<rdf:li rdf:resource="http://sach1o.blog80.fc2.com/blog-entry-98.html" />
<rdf:li rdf:resource="http://sach1o.blog80.fc2.com/blog-entry-97.html" />
<rdf:li rdf:resource="http://sach1o.blog80.fc2.com/blog-entry-96.html" />
<rdf:li rdf:resource="http://sach1o.blog80.fc2.com/blog-entry-95.html" />
<rdf:li rdf:resource="http://sach1o.blog80.fc2.com/blog-entry-94.html" />
<rdf:li rdf:resource="http://sach1o.blog80.fc2.com/blog-entry-93.html" />
<rdf:li rdf:resource="http://sach1o.blog80.fc2.com/blog-entry-92.html" />
</rdf:Seq>
</items>
</channel>
<item rdf:about="http://sach1o.blog80.fc2.com/blog-entry-101.html">
<link>http://sach1o.blog80.fc2.com/blog-entry-101.html</link>
<title>Google Adsenseのプライバシーポリシーについて</title>
<description> Google Adsenseのプライバシーポリシーについて明記したページへのリンクをサイドメニューに追加しました。参考：初心者によるMATLABメモ | プライバシーポリシーこのブログも更新したいネタはいろいろあるんですが、仕事が忙しくなかなか更新できません・・・機を見て一挙に更新したいと思います。
 </description>
<content:encoded>
<![CDATA[ Google Adsenseのプライバシーポリシーについて明記したページへのリンクをサイドメニューに追加しました。<br /><br /><i>参考：<a href="http://sach1o.web.fc2.com/privacy_policy.html" target="_blank">初心者によるMATLABメモ | プライバシーポリシー</a></i><br /><br />このブログも更新したいネタはいろいろあるんですが、仕事が忙しくなかなか更新できません・・・<br />機を見て一挙に更新したいと思います。<br /><br /> ]]>
</content:encoded>
<dc:subject>その他</dc:subject>
<dc:date>2009-04-11T19:04:59+09:00</dc:date>
<dc:creator>sach1o</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
<item rdf:about="http://sach1o.blog80.fc2.com/blog-entry-100.html">
<link>http://sach1o.blog80.fc2.com/blog-entry-100.html</link>
<title>OSの環境変数を使用する</title>
<description> MATLABを使っていて、OSの環境変数を使用できると便利な場面が意外とあると思うのですが、そんな場合はgetenvを使用することで簡単に実現できます。N = getenv('環境変数名')例えば、自分はシミュレーションを複数の計算機でかけてるんですが、進捗状況メールがどの計算機から送られてきたのか混乱することも度々…ということを繰り返した結果、今では進捗状況をメールするときに下記のようにサブジェクトにコンピュータ名を含めて
 </description>
<content:encoded>
<![CDATA[ MATLABを使っていて、OSの環境変数を使用できると便利な場面が意外とあると思うのですが、そんな場合は<a href="http://dl.cybernet.co.jp/matlab/support/manual/r2007/toolbox/matlab/ref/?/matlab/support/manual/r2007/toolbox/matlab/ref/getenv.shtml" target="_blank">getenv</a>を使用することで簡単に実現できます。<br /><blockquote>N = getenv('環境変数名')</blockquote><br />例えば、自分はシミュレーションを複数の計算機でかけてるんですが、進捗状況メールがどの計算機から送られてきたのか混乱することも度々…<br />ということを繰り返した結果、今では進捗状況をメールするときに下記のようにサブジェクトにコンピュータ名を含めています。<br /><blockquote>subject&nbsp;=&nbsp;strcat(['[',&nbsp;<b>getenv('COMPUTERNAME')</b>,&nbsp;']',&nbsp;'テストメール']);</blockquote><br /><br />一応書いておくと、Windowsの場合は環境変数が見たければ、コマンドプロンプトで「set」コマンドを引数なしで実行すれば見れます。<br /><br /><i>参考：<a href="http://dl.cybernet.co.jp/matlab/support/manual/r2007/toolbox/matlab/ref/?/matlab/support/manual/r2007/toolbox/matlab/ref/getenv.shtml" target="_blank">MATLAB 関数リファレンス - getenv</a></i><br /> ]]>
</content:encoded>
<dc:subject>小技</dc:subject>
<dc:date>2008-07-23T10:49:02+09:00</dc:date>
<dc:creator>sach1o</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
<item rdf:about="http://sach1o.blog80.fc2.com/blog-entry-99.html">
<link>http://sach1o.blog80.fc2.com/blog-entry-99.html</link>
<title>作業ログの保存などに使う関数diaryの拡張</title>
<description> 簡単な作業ログの保存などに使う関数diaryを拡張したdiary2()です。(mファイルのダウンロードはこちら)基本的にはdiary()と機能、使い方は変わりません。違う点は、diaryだと追加書き込みに自動的になってしまいますが、diary2だと新規書き込みを行うことができます。また、開始時と停止時にタイムスタンプを自動的に書き込みます。あとは現在のdiaryファイルの名前の表示、diaryのon/offの表示の程度の機能が追加されています。使
 </description>
<content:encoded>
<![CDATA[ 簡単な作業ログの保存などに使う関数<a href="http://dl.cybernet.co.jp/matlab/support/manual/r13/toolbox/matlab/ref/?/matlab/support/manual/r13/toolbox/matlab/ref/diary.shtml" target="_blank">diary</a>を拡張したdiary2()です。(mファイルのダウンロードは<a href="#diary2">こちら</a>)<br />基本的には<a href="http://dl.cybernet.co.jp/matlab/support/manual/r13/toolbox/matlab/ref/?/matlab/support/manual/r13/toolbox/matlab/ref/diary.shtml" target="_blank">diary()</a>と機能、使い方は変わりません。<br /><br />違う点は、diaryだと追加書き込みに自動的になってしまいますが、diary2だと新規書き込みを行うことができます。<br />また、開始時と停止時にタイムスタンプを自動的に書き込みます。<br />あとは現在のdiaryファイルの名前の表示、diaryのon/offの表示の程度の機能が追加されています。<br /><br />使い方は基本的には<a href="http://dl.cybernet.co.jp/matlab/support/manual/r13/toolbox/matlab/ref/?/matlab/support/manual/r13/toolbox/matlab/ref/diary.shtml" target="_blank">diary()</a>と同じです。<br /><blockquote>diary2　…　diary('on')と同じ<br />diary new　…　以後の出力をdiaryファイルに書き込みます。(ファイルが存在しても新規書き込み)<br />diary on　…　以後の出力をdiaryファイルに書き込みます。(ファイルが存在すれば追加書き込み)<br />diary off　…　書き込みを中止します。<br /><br />diary stat　…　diaryモードのON/OFFを表示します。<br />diary fname　…　現在指定されているdiaryファイル名を表示します。<br /><br />diary('ファイル名')　…　diaryファイル名を指定して書き込みを開始します。<br />diary('ファイル名','on')　…　diaryファイル名を指定し、追加書き込みを行うことができます。<br />diary('ファイル名','new')　…　diaryファイル名を指定し、新規書き込みを行うことができます。<br /><br />※diary2('file')は、diary2('file','on')と同じです。</blockquote><br />on/off/newあたりは普通のdiaryと使い方が同じなので、ここでは省略するとして、一応statとfnameだけ例を載せておきます。<br />一連の流れとして使用するとこんな感じです。<br /><blockquote>&gt;&gt;&nbsp;diary2('diary.txt','new')<br />&gt;&gt;&nbsp;diary2&nbsp;fname<br />現在のdiaryのファイル名&nbsp;...&nbsp;[&nbsp;diary.txt&nbsp;]<br />&gt;&gt;&nbsp;diary2&nbsp;stat<br />現在のdiaryの状態&nbsp;...&nbsp;[&nbsp;on&nbsp;]<br />&gt;&gt;&nbsp;diary2&nbsp;off<br />&gt;&gt;&nbsp;diary2&nbsp;stat<br />現在のdiaryの状態&nbsp;...&nbsp;[&nbsp;off&nbsp;]</blockquote><br />最後にソースを載せておきます。<br />また、diary2()のヘルプ付きのmファイルのダウンロードは<a href="#diary2">こちら</a>から行えます。<br /><blockquote>function&nbsp;diary2(varargin)&nbsp;<br /><br />%%&nbsp;引数のチェックと処理<br />error(nargchk(0,2,nargin));<br /><br />opt&nbsp;=&nbsp;0;<br />diary_path&nbsp;=&nbsp;get(0,&nbsp;'DiaryFile');<br />mode&nbsp;=&nbsp;{'on','new','off','stat','fname'};<br /><br />for&nbsp;ii&nbsp;=&nbsp;1:nargin&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;in&nbsp;=&nbsp;varargin{ii};<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;ischar(in)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hit&nbsp;=&nbsp;find(strcmpi(lower(in),&nbsp;mode));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;isempty(hit)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;~strcmpi(diary_path,in)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;diary2&nbsp;off;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;diary_path&nbsp;=&nbsp;in;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;opt&nbsp;=&nbsp;hit(1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br />&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;error('引数は文字列である必要があります');<br />&nbsp;&nbsp;&nbsp;&nbsp;end;<br />end;<br /><br />if&nbsp;opt==0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;strcmpi(get(0,'Diary'),'on')&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;opt=3;<br />&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;opt=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;end;<br />end;<br />%%&nbsp;<br /><br /><br />%%&nbsp;実際の処理<br />switch&nbsp;opt&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;%&nbsp;書き込み開始&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;{1,2}&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%&nbsp;diaryファイルへの書き込み開始メッセージ書き込み&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;strcmpi(get(0,'Diary'),'off')&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;opt==1&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;perm&nbsp;=&nbsp;'a+';<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;perm&nbsp;=&nbsp;'w+';<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fid&nbsp;=&nbsp;fopen(diary_path,perm);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(fid,&nbsp;'%s&yen;n',&nbsp;'%%%&nbsp;=================&nbsp;&nbsp;diary&nbsp;書き込み開始&nbsp;====================&nbsp;');<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(fid,&nbsp;'%s%s&yen;n&yen;n',&nbsp;'+&nbsp;現在時間&nbsp;:&nbsp;',&nbsp;datestr(now,31));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fclose(fid);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%&nbsp;diary&nbsp;on<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;diary(diary_path);<br />&nbsp;&nbsp;&nbsp;&nbsp;%&nbsp;書き込み停止&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;3<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%&nbsp;diaryファイルへの書き込み終了メッセージ書き込み&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;strcmpi(get(0,'Diary'),'on')&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;diary&nbsp;off;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fid&nbsp;=&nbsp;fopen(diary_path,'r+');<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;body&nbsp;=&nbsp;{};<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frewind(fid);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;1&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tline&nbsp;=&nbsp;fgetl(fid);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;~ischar(tline),&nbsp;break,&nbsp;end;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;body{length(body)+1}&nbsp;=&nbsp;tline;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;body{end}&nbsp;=&nbsp;[];<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frewind(fid);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;ii=1:length(body)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(fid,&nbsp;'%s&yen;n',&nbsp;body{ii});<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(fid,&nbsp;'%s%s&yen;n',&nbsp;'+&nbsp;現在時間&nbsp;:&nbsp;',&nbsp;datestr(now,31));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(fid,&nbsp;'%s&yen;n',&nbsp;'%%&nbsp;==========&nbsp;/&nbsp;diary&nbsp;書き込み停止&nbsp;==========');<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fclose(fid);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br />&nbsp;&nbsp;&nbsp;&nbsp;%&nbsp;ステータス&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;4&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp(sprintf('現在のdiaryの状態&nbsp;...&nbsp;[&nbsp;%s&nbsp;]',&nbsp;get(0,'Diary')));<br />&nbsp;&nbsp;&nbsp;&nbsp;%&nbsp;ファイル名表示&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;5&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;disp(sprintf('現在のdiaryのファイル名&nbsp;...&nbsp;[&nbsp;%s&nbsp;]',&nbsp;get(0,'DiaryFile')));<br />&nbsp;&nbsp;&nbsp;&nbsp;otherwise<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;help&nbsp;diary2;<br />end</blockquote><br /><br /><i>参考：<a href="http://dl.cybernet.co.jp/matlab/support/manual/r13/toolbox/matlab/ref/?/matlab/support/manual/r13/toolbox/matlab/ref/diary.shtml" target="_blank">MATLAB Function Reference - diary</a></i><br /><i>ダウンロード：<a id="diary2" name="diary2" href="http://sach1o.web.fc2.com/files/diary2.zip" target="_blank">このエントリのmファイル</a>　左クリックでお願いします。</i>　（リファラを送信しない場合は，アクセス拒否になってしまいます） ]]>
</content:encoded>
<dc:subject>基本</dc:subject>
<dc:date>2008-06-07T15:47:12+09:00</dc:date>
<dc:creator>sach1o</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
<item rdf:about="http://sach1o.blog80.fc2.com/blog-entry-98.html">
<link>http://sach1o.blog80.fc2.com/blog-entry-98.html</link>
<title>非線形方程式を解く（準ニュートン法：csolve）</title>
<description> たまたまここでで見たんですが、↓だそうです。2月最後の授業で言ったように､Matlabのoptimization toolboxを持っている場合､この中の関数fsolveを用いることによって非線形の連立方程式の解を求めることができます。しかし、その後調べたところ､数値計算に関する教科書を著しているKenn Juddは彼のホームページでこの関数はイマイチ（”poor”）であると述べ(リンク先参照)、それよりもChristopher Simsの書いた関数コードであるcsol
 </description>
<content:encoded>
<![CDATA[ たまたま<a href="http://www.econ.hit-u.ac.jp/~shioji/kinkei/on_fsolve.htm" target="_blank">ここで</a>で見たんですが、↓だそうです。<br /><blockquote class="quote">2月最後の授業で言ったように､Matlabのoptimization toolboxを持っている場合､この中の関数fsolveを用いることによって非線形の連立方程式の解を求めることができます。しかし、その後調べたところ､数値計算に関する教科書を著しているKenn Juddは彼のホームページでこの関数はイマイチ（”poor”）であると述べ(リンク先参照)、それよりもChristopher Simsの書いた関数コードであるcsolve.mの利用を推奨しています。…<br />…<br /><i>参考：<a href="http://www.econ.hit-u.ac.jp/~shioji/kinkei/on_fsolve.htm" target="_blank">コメント：Matlab関数fsolveについて</a></i><br /></blockquote><br />で、実際にリンクをたどってみると、確かに書いてありますね。そんなものを売るな！という話もありますが、まぁそれはそれ。無料の方が強力なら、それもよしです。<br /><blockquote class="quote">A Matlab Nonlinear Equation Solver The nonlinear equation solver in Matlab, fsolve, is a poor one based on minimizing the sum of squares of the functions. Chris Sims offers an improvement; see his ftp page.…<br />…<br /><i>参考：<a href="http://bucky.stanford.edu/numericalmethods/PUBCODE/chapter_5.htm" target="_blank">Chapter 5 public code</a></i><br /></blockquote><br />とりあえずcsolve()が欲しいなら、<a href="http://sims.princeton.edu/yftp/optimize/mfiles/" target="_blank">ここ</a>からダウンロードできます。<br /><br />以下で、csolve()の使い方を書いておきます。<br />非線形の方程式ソルバーcolve()は，準ニュートン法ベースで、通常の解法で極値，振動などで解が求まらない場合，ランダム方向に解を検索することで解を改善しようとします．<br />実際の使い方は下記です。<br /><blockquote>[x,rc]&nbsp;=&nbsp;csolve(FUN,x0,gradfun,crit,itmax)<br />[x,rc]&nbsp;=&nbsp;csolve(FUN,x0,gradfun,crit,itmax,varargin)<br /><br />%&nbsp;[引数]<br />FUN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;解かれる非線形システム方程式。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FUNはベクトルxを引数として計算した非線形方程式のベクトルFを返します。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ベクトルFはベクトルxと常に同じサイズである必要があります。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;関数FUNは、関数ハンドルを使って指定することができます。<br />x0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;解の探索のための初期値．<br />gradfun&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;ヤコビ行列の関数．<br />crit&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;FUNが返す絶対値の合計がこの値より小さいならば、解が収束したと判断されます。<br />itmax&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;許可する繰り返しの最大回数．もし繰り返しの回数がこの値に達した場合、第2出力rcに4が返ります。<br />varargin:&nbsp;&nbsp;&nbsp;&nbsp;関数FUNとgradfunに渡す、ベクトルx以外のパラメータを指定します。</blockquote><br />この関数は実際に使った例を示します。<br />ここでは、下記の非線形方程式を解いてみます。<br /><a href="http://blog-imgs-16.fc2.com/s/a/c/sach1o/fsolve_001.gif" target="_blank"><img src="http://blog-imgs-16.fc2.com/s/a/c/sach1o/fsolve_001.gif" alt="" border="0" /></a><br />この式は<a href="http://sach1o.blog80.fc2.com/blog-entry-70.html" target="_blank">fsolve</a>のときと同じ方程式です。<br />方程式の関数は下記です。<br /><blockquote>%&nbsp;方程式の関数<br />function&nbsp;F&nbsp;=&nbsp;funcs(x)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;F&nbsp;=&nbsp;zeros(numel(x),1);<br />&nbsp;&nbsp;&nbsp;&nbsp;F(1)&nbsp;=&nbsp;x(1)^2+x(2)^2-4;<br />&nbsp;&nbsp;&nbsp;&nbsp;F(2)&nbsp;=&nbsp;x(1)*x(2)-x(3);<br />&nbsp;&nbsp;&nbsp;&nbsp;F(3)&nbsp;=&nbsp;x(1)*x(3)-1;<br />&nbsp;&nbsp;&nbsp;&nbsp;F&nbsp;=&nbsp;F(:);<br /><br />%&nbsp;関数funcsのヤコビ行列<br />function&nbsp;J&nbsp;=&nbsp;funcsj(x)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;J&nbsp;=&nbsp;zeros(numel(x));<br />&nbsp;&nbsp;&nbsp;&nbsp;J(1,1)&nbsp;=&nbsp;2*x(1);<br />&nbsp;&nbsp;&nbsp;&nbsp;J(2,1)&nbsp;=&nbsp;x(2);<br />&nbsp;&nbsp;&nbsp;&nbsp;J(3,1)&nbsp;=&nbsp;x(3);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;J(1,2)&nbsp;=&nbsp;2*x(2);<br />&nbsp;&nbsp;&nbsp;&nbsp;J(2,2)&nbsp;=&nbsp;x(1);<br />&nbsp;&nbsp;&nbsp;&nbsp;J(3,2)&nbsp;=&nbsp;0;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;J(1,3)&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;J(2,3)&nbsp;=&nbsp;-1;<br />&nbsp;&nbsp;&nbsp;&nbsp;J(3,3)&nbsp;=&nbsp;x(1);</blockquote><br />実行例は、下記です。<a href="http://sach1o.blog80.fc2.com/blog-entry-70.html" target="_blank">fsolveのとき</a>と同じ解になっていることがわかります。<br /><blockquote>&gt;&gt;&nbsp;[x,exitflag]&nbsp;=&nbsp;mcsolve(@funcs,&nbsp;ones(3,1),&nbsp;@funcsj,&nbsp;1e-12,&nbsp;100,&nbsp;4,&nbsp;1)<br />itct&nbsp;1,&nbsp;af&nbsp;1.0208,&nbsp;lambda&nbsp;0.36,&nbsp;rc&nbsp;0<br />&nbsp;&nbsp;&nbsp;x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.64&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.72&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.36&nbsp;<br />&nbsp;&nbsp;&nbsp;f&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-0.632&nbsp;&nbsp;&nbsp;&nbsp;-0.2592&nbsp;&nbsp;&nbsp;&nbsp;-0.1296&nbsp;<br />itct&nbsp;2,&nbsp;af&nbsp;0.0452359,&nbsp;lambda&nbsp;1,&nbsp;rc&nbsp;0<br />&nbsp;&nbsp;&nbsp;x&nbsp;&nbsp;&nbsp;&nbsp;0.735407&nbsp;&nbsp;&nbsp;&nbsp;1.86822&nbsp;&nbsp;&nbsp;&nbsp;1.35976&nbsp;<br />&nbsp;&nbsp;&nbsp;f&nbsp;&nbsp;&nbsp;0.0310718&nbsp;&nbsp;0.0141413&nbsp;-2.28221e-005&nbsp;<br />itct&nbsp;3,&nbsp;af&nbsp;8.75519e-005,&nbsp;lambda&nbsp;1,&nbsp;rc&nbsp;0<br />&nbsp;&nbsp;&nbsp;x&nbsp;&nbsp;&nbsp;&nbsp;0.733074&nbsp;&nbsp;&nbsp;&nbsp;1.86082&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.3641&nbsp;<br />&nbsp;&nbsp;&nbsp;f&nbsp;&nbsp;6.0167e-005&nbsp;1.72542e-005&nbsp;-1.01306e-005&nbsp;<br />itct&nbsp;4,&nbsp;af&nbsp;3.64242e-010,&nbsp;lambda&nbsp;1,&nbsp;rc&nbsp;0<br />&nbsp;&nbsp;&nbsp;x&nbsp;&nbsp;&nbsp;&nbsp;0.733077&nbsp;&nbsp;&nbsp;&nbsp;1.86081&nbsp;&nbsp;&nbsp;&nbsp;1.36411&nbsp;<br />&nbsp;&nbsp;&nbsp;f&nbsp;&nbsp;2.9954e-010&nbsp;-4.20057e-011&nbsp;2.26965e-011&nbsp;<br />itct&nbsp;5,&nbsp;af&nbsp;8.88178e-016,&nbsp;lambda&nbsp;1,&nbsp;rc&nbsp;0<br />&nbsp;&nbsp;&nbsp;x&nbsp;&nbsp;&nbsp;&nbsp;0.733077&nbsp;&nbsp;&nbsp;&nbsp;1.86081&nbsp;&nbsp;&nbsp;&nbsp;1.36411&nbsp;<br />&nbsp;&nbsp;&nbsp;f&nbsp;&nbsp;8.88178e-016&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;<br />x&nbsp;=<br />&nbsp;&nbsp;&nbsp;&nbsp;0.7331<br />&nbsp;&nbsp;&nbsp;&nbsp;1.8608<br />&nbsp;&nbsp;&nbsp;&nbsp;1.3641<br /><br /><br />exitflag&nbsp;=<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0</blockquote><br />ただし、この関数csolve()は少々使いづらい部分もありますね。そのあたりは次のエントリに書きたいと思います。<br /><br /><i>参考：<a href="http://www.econ.hit-u.ac.jp/~shioji/kinkei/on_fsolve.htm" target="_blank">コメント：Matlab関数fsolveについて</a></i><br /><i>参考：<a href="http://sims.princeton.edu/yftp/optimize/mfiles/" target="_blank">csolve()のダウンロード先</a></i><br /><i>参考：<a href="http://mikilab.doshisha.ac.jp/dia/research/report/2006/0807/008/report20060807008.html" target="_blank">【文献調査】BFGSの基礎</a></i><br /><i>参考：<a href="http://sach1o.blog80.fc2.com/blog-entry-70.html" target="_blank">初心者によるMATLABメモ｜ 非線形方程式を解く(fsolve)</a></i> ]]>
</content:encoded>
<dc:subject>数値解析</dc:subject>
<dc:date>2008-01-27T16:31:27+09:00</dc:date>
<dc:creator>sach1o</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
<item rdf:about="http://sach1o.blog80.fc2.com/blog-entry-97.html">
<link>http://sach1o.blog80.fc2.com/blog-entry-97.html</link>
<title>MATLABからメールを送信する</title>
<description> 意外と知らない人もいますが、MATLABからメールを送信することができます。これが意外と便利なので紹介しておきます。例えば、どれくらいかかるかわからない長い計算をかけている場合、「終わったかな？」とわざわざチェックするのは面倒です。そこで、僕は計算が終わったらメールが来るようにしています。以下、MATLABからメールを送信する方法です。まず、基本的なSMTPサーバ（送信用のメールサーバ）の設定を行います。ここらへ
 </description>
<content:encoded>
<![CDATA[ 意外と知らない人もいますが、MATLABからメールを送信することができます。<br />これが意外と便利なので紹介しておきます。<br />例えば、どれくらいかかるかわからない長い計算をかけている場合、「終わったかな？」とわざわざチェックするのは面倒です。<br />そこで、僕は計算が終わったらメールが来るようにしています。<br /><br />以下、MATLABからメールを送信する方法です。<br />まず、基本的なSMTPサーバ（送信用のメールサーバ）の設定を行います。<br />ここらへんは<a href="http://sach1o.blog80.fc2.com/blog-entry-82.html" target="_blank">startup.m</a>に書いておくと便利でしょう。ただし、パスワードも記入する場合には取り扱いに注意してください。<br /><blockquote>%&nbsp;SMTPサーバの設定<br />setpref(&nbsp;'Internet',&nbsp;'SMTP_Server',&nbsp;'SMTPサーバ');<br />%&nbsp;SMTPサーバでのユーザ名（必要なら）<br />setpref(&nbsp;'Internet',&nbsp;'SMTP_Username',&nbsp;'ユーザ名');<br />%&nbsp;SMTPサーバでのパスワード（必要なら）<br />setpref(&nbsp;'Internet',&nbsp;'SMTP_Password',&nbsp;'パスワード');<br />%&nbsp;自分のアドレス（Fromになる）<br />setpref('Internet',&nbsp;'E_mail',&nbsp;'自分のアドレス');</blockquote><br />あとは下記のように<a href="http://dl.cybernet.co.jp/matlab/support/manual/r13/toolbox/matlab/ref/?/matlab/support/manual/r13/toolbox/matlab/ref/sendmail.shtml" target="_blank">sendmail</a>関数を使用すればメールを送ることが出来ます。<br /><blockquote>sendmail('相手のメールアドレス','題名','メッセージ')</blockquote><br />また、添付ファイルをつけたい場合は以下です。<br /><blockquote>sendmail('相手のメールアドレス','題名','メッセージ','添付ファイルのパス')</blockquote><br />その他、複数の人に送る場合、複数の添付ファイルを付けたい場合などは<a href="http://dl.cybernet.co.jp/matlab/support/manual/r2006/toolbox/matlab/matlab_prog/?/matlab/support/manual/r2006/toolbox/matlab/matlab_prog/f5-136211.shtml" target="_blank">こちら</a>を参考にしてください。<br /><br /><i>参考：<a href="http://dl.cybernet.co.jp/matlab/support/manual/r13/toolbox/matlab/ref/?/matlab/support/manual/r13/toolbox/matlab/ref/sendmail.shtml" target="_blank">MATLAB：マニュアル:サイバネットシステム - MATLAB Function Reference - sendmail</a></i><br /><i>参考：<a href="http://dl.cybernet.co.jp/matlab/support/manual/r2006/toolbox/matlab/matlab_prog/?/matlab/support/manual/r2006/toolbox/matlab/matlab_prog/f5-136211.shtml" target="_blank">MATLAB：マニュアル:サイバネットシステム  - MATLAB Programming - E メールの送信</a></i><br /><i>参考：<a href="http://sach1o.blog80.fc2.com/blog-entry-82.html" target="_blank">初心者によるMATLABメモ｜ 起動時にデフォルトカラーなどを設定する　（起動時にスクリプトを実行）</a></i><br /> ]]>
</content:encoded>
<dc:subject>小技</dc:subject>
<dc:date>2008-01-27T14:30:50+09:00</dc:date>
<dc:creator>sach1o</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
<item rdf:about="http://sach1o.blog80.fc2.com/blog-entry-96.html">
<link>http://sach1o.blog80.fc2.com/blog-entry-96.html</link>
<title>点列から曲率、曲率半径を求める（FastCode）</title>
<description> plotやplot3で表示した曲線の点列から数値的に曲率を求める関数curvature_numeric()です。先に書いておきますが，接線、主法線、従法線のときと同様に、データ間の距離があまりにも異なる場合にはこの方法だと誤差が大きくなります。基本的にある程度等距離に点が並んでいることを前提にした関数です。まず、使い方です。kk = curvature_numeric(ppp)　…　点列pppから各点における曲率kkを求めます。kk = curvature_numeric(ppp,di
 </description>
<content:encoded>
<![CDATA[ plotやplot3で表示した曲線の点列から数値的に曲率を求める関数curvature_numeric()です。<br />先に書いておきますが，<a href="http://sach1o.blog80.fc2.com/blog-entry-87.html" target="_blank">接線</a>、<a href="http://sach1o.blog80.fc2.com/blog-entry-95.html" target="_blank">主法線</a>、<a href="http://sach1o.blog80.fc2.com/blog-entry-94.html" target="_blank">従法線</a>のときと同様に、データ間の距離があまりにも異なる場合にはこの方法だと誤差が大きくなります。<br />基本的にある程度等距離に点が並んでいることを前提にした関数です。<br /><br />まず、使い方です。<br /><blockquote>kk = curvature_numeric(ppp)　…　点列pppから各点における曲率kkを求めます。<br />kk = curvature_numeric(ppp,dim)　…　点ベクトルの形式をdimで指定して，点列pppから各点における曲率kkを求めます。<br /><br />※点列pppは2次元，もしくは3次元である必要があります。<br />※第2引数dimは，どの次元でひとつの点を表現するかの整数値です。<br />※2次元の場合は曲率は正負の符号付で返ります。</blockquote><br />ここでは，コードは省いてこの関数における曲率の求め方について簡単に書いておきます。（ダウンロードは<a href="#curvature_numeric">こちら</a>から）<br />基本的には，求めたい曲率を持つ点とその両隣の点の作る三角形の外接円の半径を曲率半径とみなし、その逆数として曲率を計算しています。<br /><a href="http://blog-imgs-27.fc2.com/s/a/c/sach1o/discrete_curvature.gif" target="_blank"><img src="http://blog-imgs-27.fc2.com/s/a/c/sach1o/discrete_curvature.gif" alt="曲率 : 外接円" border="0" /></a><br />上の図より外接円の直径は下記の式で表されます。ここでRは外接円の半径です。<br /><a href="http://blog-imgs-27.fc2.com/s/a/c/sach1o/curvature001.gif" target="_blank"><img src="http://blog-imgs-27.fc2.com/s/a/c/sach1o/curvature001.gif" alt="曲率の式 1" border="0" /></a>　（1）<br />式（1）より、曲率は下記の式(2)で表すことが出来ます。<br /><a href="http://blog-imgs-27.fc2.com/s/a/c/sach1o/curvature002.gif" target="_blank"><img src="http://blog-imgs-27.fc2.com/s/a/c/sach1o/curvature002.gif" alt="曲率の式 2" border="0" /></a>　（2）<br />まず平面の場合を考えます。<br />このとき、下記の式(3)が成り立ちます。detは行列式です。<br /><a href="http://blog-imgs-27.fc2.com/s/a/c/sach1o/curvature003.gif" target="_blank"><img src="http://blog-imgs-27.fc2.com/s/a/c/sach1o/curvature003.gif" alt="曲率の式 3" border="0" /></a>　（3）<br />式（2）、（3）より曲率は下記の式(4)と近似できることがわかります。<br /><a href="http://blog-imgs-27.fc2.com/s/a/c/sach1o/curvature004.gif" target="_blank"><img src="http://blog-imgs-27.fc2.com/s/a/c/sach1o/curvature004.gif" alt="曲率の式 4" border="0" /></a>　（4）<br />また、平面でないときには下記の式(5)のように近似しています。<br /><a href="http://blog-imgs-27.fc2.com/s/a/c/sach1o/curvature005.gif" target="_blank"><img src="http://blog-imgs-27.fc2.com/s/a/c/sach1o/curvature005.gif" alt="曲率の式 5" border="0" /></a>　（5）<br />以下、実際の使用例です。<br />ここでは、<a href="http://sach1o.blog80.fc2.com/blog-entry-72.html" target="_blank">この記事</a>の生成例のベジエ曲線の曲率をcurvature_numeric()を使用して、計算してみます。<br /><br />一応、曲率の理論値は下記です。<br />こちらの曲率は定義式からちゃんと計算した値です。<br /><a href="http://blog-imgs-27.fc2.com/s/a/c/sach1o/curvatureG001.png" target="_blank"><img src="http://blog-imgs-27.fc2.com/s/a/c/sach1o/curvatureG001.png" alt="曲率のグラフ（理論値）" border="0" /></a><br />続いて、curvature_numeric()を使用して計算した曲率をプロットしてみると、下記のようになります。<br />両者を比較してもらえばわかると思いますが、結構上手く近似されると思います。<br /><a href="http://blog-imgs-27.fc2.com/s/a/c/sach1o/curvatureG002.png" target="_blank"><img src="http://blog-imgs-27.fc2.com/s/a/c/sach1o/curvatureG002.png" alt="曲率のグラフ" border="0" /></a><br />一応補足ですが、曲率半径が欲しい場合は下記の関数を使ってください。これは単にcurvature_numeric()の逆数を求めて、絶対値をとっているいるだけです。<br /><blockquote>rr = curvatureR_numeric(ppp)　…　点列pppから各点における曲率半径rrを求めます。<br />rr = curvatureR_numeric(ppp,dim)　…　点ベクトルの形式をdimで指定して，点列pppから各点における曲率半径rrを求めます。<br /><br />※点列pppは2次元，もしくは3次元である必要があります。<br />※第2引数dimは，どの次元でひとつの点を表現するかの整数値です。</blockquote><br />ヘルプ付きのmファイルは下記よりダウンロードしてください。他の接線などの関数も同封です。<br /><br /><i>参考：<a href="http://sach1o.blog80.fc2.com/blog-entry-87.html" target="_blank">初心者によるMATLABメモ｜ 点列から接線ベクトルを求める（FastCode）</a></i><br /><i>参考：<a href="http://sach1o.blog80.fc2.com/blog-entry-95.html" target="_blank">初心者によるMATLABメモ｜ 点列から主法線ベクトルを求める（FastCode）</a></i><br /><i>参考：<a href="http://sach1o.blog80.fc2.com/blog-entry-94.html" target="_blank">初心者によるMATLABメモ｜ 点列から従法線ベクトルを求める（FastCode）</a></i><br /><i>参考：<a href="http://sach1o.blog80.fc2.com/blog-entry-72.html" target="_blank">初心者によるMATLABメモ｜ 通過点列を通るC2連続な3次ベジエ曲線の生成</a></i><br /><i>ダウンロード：<a id="curvature_numeric" name="curvature_numeric" href="http://sach1o.web.fc2.com/files/geom.zip" target="_blank">このエントリのmファイル</a>　左クリックでお願いします。</i>（リファラを送信しない場合は，アクセス拒否になってしまいます）<br /> ]]>
</content:encoded>
<dc:subject>Geometry</dc:subject>
<dc:date>2008-01-24T16:27:15+09:00</dc:date>
<dc:creator>sach1o</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
<item rdf:about="http://sach1o.blog80.fc2.com/blog-entry-95.html">
<link>http://sach1o.blog80.fc2.com/blog-entry-95.html</link>
<title>点列から主法線ベクトルを求める（FastCode）</title>
<description> この記事の接線、この記事の従法線に続いて，plotやplot3で表示した曲線の点列から数値的に主法線を求める関数です。まず、使い方です。他の2つと同様です。nvec = normal_numeric(ppp)　…　点列pppから各点における主法線nvecを求めます。nvec = normal_numeric(ppp,dim)　…　点ベクトルの形式をdimで指定して，点列pppから各点における主法線nvecを求めます。※点列pppは2次元，もしくは3次元である必要があります。※第2引数dimは
 </description>
<content:encoded>
<![CDATA[ <a href="http://sach1o.blog80.fc2.com/blog-entry-87.html" target="_blank">この記事</a>の接線、<a href="http://sach1o.blog80.fc2.com/blog-entry-94.html" target="_blank">この記事</a>の従法線に続いて，plotやplot3で表示した曲線の点列から数値的に主法線を求める関数です。<br /><br />まず、使い方です。他の2つと同様です。<br /><blockquote>nvec = normal_numeric(ppp)　…　点列pppから各点における主法線nvecを求めます。<br />nvec = normal_numeric(ppp,dim)　…　点ベクトルの形式をdimで指定して，点列pppから各点における主法線nvecを求めます。<br /><br />※点列pppは2次元，もしくは3次元である必要があります。<br />※第2引数dimは，どの次元でひとつの点を表現するかの整数値です。</blockquote><br />この関数における従法線の求め方について簡単に書いておきますと、下記のように従法線と接線の外積から求めています。（ダウンロードは<a href="#normal_numeric">こちら</a>から）<br /><a href="http://blog-imgs-27.fc2.com/s/a/c/sach1o/normal001.gif" target="_blank"><img src="http://blog-imgs-27.fc2.com/s/a/c/sach1o/normal001.gif" alt="法線" border="0" /></a><br /><br />一応、接線、主法線、従法線は、下記のような関係になっています。<br /><a href="http://blog-imgs-27.fc2.com/s/a/c/sach1o/frenet.gif" target="_blank"><img src="http://blog-imgs-27.fc2.com/s/a/c/sach1o/frenet.gif" alt="Frenet-Frame" border="0" /></a><br /><br />また、接線については<a href="http://sach1o.blog80.fc2.com/blog-entry-87.html" target="_blank">tangent_numeric()</a>を利用しているので、下記の式で求めています。<br /><a href="http://blog-imgs-27.fc2.com/s/a/c/sach1o/tangent001.gif" target="_blank"><img src="http://blog-imgs-27.fc2.com/s/a/c/sach1o/tangent001.gif" alt="接線" border="0" /></a><br /><br />同様に従法線についても<a href="http://sach1o.blog80.fc2.com/blog-entry-94.html" target="_blank">binormal_numeric()</a>を利用しているので、下記の式で求めています。<br /><a href="http://blog-imgs-27.fc2.com/s/a/c/sach1o/binormal001.gif" target="_blank"><img src="http://blog-imgs-27.fc2.com/s/a/c/sach1o/binormal001.gif" alt=""従法線 border="0" /></a><br /><br />以下、使用例です。<br />数値の例は接線、従法線と同様なのでここでは省略して、実際に表示させてみた例を示します。<br />螺旋曲線を生成してある点での接線、主法線、従法線を表示しています。<br />この例の場合もarrow3については<a href="http://sach1o.blog80.fc2.com/blog-entry-87.html" target="_blank">この記事</a>中に書いてあるように，標準の関数ではないので、必要に応じて<a href="http://www.mathworks.com/matlabcentral/fileexchange/loadFile.do?objectId=1430&amp;objectType=file" target="_blank">MATLAB CentralのFile Exchange</a>からダウンロードしてください。（<a href="http://sach1o.blog80.fc2.com/blog-entry-43.html" target="_blank">arrow3の使い方はこちらを参照してください</a>。）<br /><blockquote>%&nbsp;3次元の例　：　螺旋曲線の接線（赤）、主法線（青）、従法線（緑）<br />divn&nbsp;=&nbsp;200;<br />theta&nbsp;=&nbsp;linspace(0,&nbsp;5*pi,&nbsp;divn);<br />theta2&nbsp;=&nbsp;linspace(0,&nbsp;pi/3,&nbsp;divn);<br /><br />ppp&nbsp;=&nbsp;2*[cos(theta).*cos(theta2);&nbsp;sin(theta).*cos(theta2);&nbsp;sin(theta2)];<br />tvec&nbsp;=&nbsp;tangent_numeric(ppp);<br />nvec&nbsp;=&nbsp;normal_numeric(ppp);<br />bvec&nbsp;=&nbsp;binormal_numeric(ppp);<br /><br />figure(&nbsp;'InvertHardcopy',&nbsp;'off',&nbsp;'Color',&nbsp;[1&nbsp;1&nbsp;1],&nbsp;'Position',&nbsp;[2&nbsp;300&nbsp;400&nbsp;300]);<br />xlabel({'x'},&nbsp;'FontName','Times&nbsp;New&nbsp;Roman');<br />ylabel({'y'},&nbsp;'FontName','Times&nbsp;New&nbsp;Roman');<br />zlabel({'z'},&nbsp;'FontName','Times&nbsp;New&nbsp;Roman');<br />hold&nbsp;on;<br />nn=140;<br />plot3(ppp(1,:),ppp(2,:),ppp(3,:));<br />axis&nbsp;equal;<br />arrow3(ppp(:,nn)',[ppp(:,nn)+tvec(:,nn)]',&nbsp;'r-',&nbsp;0.1,&nbsp;0.2,&nbsp;0.1);<br />arrow3(ppp(:,nn)',[ppp(:,nn)+nvec(:,nn)]',&nbsp;'b-',&nbsp;0.1,&nbsp;0.2,&nbsp;0.1);<br />arrow3(ppp(:,nn)',[ppp(:,nn)+bvec(:,nn)]',&nbsp;'g-',&nbsp;0.1,&nbsp;0.2,&nbsp;0.1);<br />view(-18,26);</blockquote><br /><a href="http://blog-imgs-27.fc2.com/s/a/c/sach1o/normal002.png" target="_blank"><img src="http://blog-imgs-27.fc2.com/s/a/c/sach1o/normal002.png" alt="" border="0" /></a><br /><br />ヘルプ付きのmファイルは下記よりダウンロードしてください。<br /><br /><i>参考：<a href="http://www.mathworks.com/matlabcentral/fileexchange/loadFile.do?objectId=1430&amp;objectType=file" target="_blank">MATLAB Central File Exchange - Arrow3 version 4.58</a></i><br /><i>参考：<a href="http://sach1o.blog80.fc2.com/blog-entry-43.html" target="_blank">初心者によるMATLABメモ｜ 3次元のグラフィックスで矢印を表示する</a></i><br /><i>参考：<a href="http://sach1o.blog80.fc2.com/blog-entry-87.html" target="_blank">初心者によるMATLABメモ｜ 点列から接線ベクトルを求める（FastCode）</a></i><br /><i>参考：<a href="http://sach1o.blog80.fc2.com/blog-entry-94.html" target="_blank">初心者によるMATLABメモ｜ 点列から従法線ベクトルを求める（FastCode）</a></i><br /><i>ダウンロード：<a id="normal_numeric" name="normal_numeric" href="http://sach1o.web.fc2.com/files/geom.zip" target="_blank">このエントリのmファイル</a>　左クリックでお願いします。</i>（リファラを送信しない場合は，アクセス拒否になってしまいます）<br /> ]]>
</content:encoded>
<dc:subject>Geometry</dc:subject>
<dc:date>2008-01-24T12:47:47+09:00</dc:date>
<dc:creator>sach1o</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
<item rdf:about="http://sach1o.blog80.fc2.com/blog-entry-94.html">
<link>http://sach1o.blog80.fc2.com/blog-entry-94.html</link>
<title>点列から従法線ベクトルを求める（FastCode）</title>
<description> この記事の接線に続いて，plotやplot3で表示した曲線の点列から数値的に従法線を求める関数です。先に書いておきますが，データ間の距離があまりにも異なる場合にはこの方法だと誤差が大きくなります。基本的にある程度等距離に点が並んでいることを前提にした関数です。まず、使い方です。bvec = binormal_numeric(ppp)　…　点列pppから各点における従法線bvecを求めます。bvec = binormal_numeric(ppp,dim)　…　点ベクトルの形式
 </description>
<content:encoded>
<![CDATA[ <a href="http://sach1o.blog80.fc2.com/blog-entry-87.html" target="_blank">この記事</a>の接線に続いて，plotやplot3で表示した曲線の点列から数値的に従法線を求める関数です。<br />先に書いておきますが，データ間の距離があまりにも異なる場合にはこの方法だと誤差が大きくなります。<br />基本的にある程度等距離に点が並んでいることを前提にした関数です。<br /><br />まず、使い方です。<br /><blockquote>bvec = binormal_numeric(ppp)　…　点列pppから各点における従法線bvecを求めます。<br />bvec = binormal_numeric(ppp,dim)　…　点ベクトルの形式をdimで指定して，点列pppから各点における従法線bvecを求めます。<br /><br />※点列pppは2次元，もしくは3次元である必要があります。<br />※第2引数dimは，どの次元でひとつの点を表現するかの整数値です。</blockquote><br />ここでは，コードは省いてこの関数における従法線の求め方について簡単に書いておきます。（ダウンロードは<a href="#binormal_numeric">こちら</a>から）<br />両端の点以外では，下記のように前後の点を用いて数値的な従法線を求めています。<br /><a href="http://blog-imgs-27.fc2.com/s/a/c/sach1o/binormal001.gif" target="_blank"><img src="http://blog-imgs-27.fc2.com/s/a/c/sach1o/binormal001.gif" alt="" border="0" /></a><br /><br />この式は簡単に言うと前後の点を含めた3点の作る三角形の法線になっています。<br /><a href="http://blog-imgs-27.fc2.com/s/a/c/sach1o/frenet.gif" target="_blank"><img src="http://blog-imgs-27.fc2.com/s/a/c/sach1o/frenet.gif" alt="" border="0" /></a><br /><br />また、始点、終点の両端点では下記のように単に隣の従法線を従法線としています。<br /><a href="http://blog-imgs-27.fc2.com/s/a/c/sach1o/binormal002.gif" target="_blank"><img src="http://blog-imgs-27.fc2.com/s/a/c/sach1o/binormal002.gif" alt="" border="0" /></a><br /><br />以下、使用例です。<br />まず1点を列ベクトル（縦）として表した場合の例です。この例では2次元の点列から従法線を求めています。<br /><blockquote>&gt;&gt;&nbsp;ppp=[[0;0],[1;1],[3;2]]<br />ppp&nbsp;=<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2<br /><br />&gt;&gt;&nbsp;binormal_numeric(ppp)<br />ans&nbsp;=<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1</blockquote><br />続いて、1点を行ベクトル（横）として表した場合の例です。この場合にはbinormal_numericに第2引数として次元2を指定してやる必要があります。（一応、指定しないでも上手くいく場合もありますが、明示的に指定してください。）また、この例も同様に2次元の点列から従法線を求めています。<br /><blockquote>&gt;&gt;&nbsp;ppp=[[0,0];[1,1];[3,2]]<br />ppp&nbsp;=<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2<br /><br />&gt;&gt;&nbsp;binormal_numeric(ppp,2)<br />ans&nbsp;=<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1</blockquote><br />この数字の例だけではわかりづらいので，実際に表示させてみた例を示します。<br /><a href="http://sach1o.blog80.fc2.com/blog-entry-87.html" target="_blank">この記事</a>と同様に、螺旋曲線を生成してある点での接線と従法線を表示しています。<br />この例の場合もarrow3については<a href="http://sach1o.blog80.fc2.com/blog-entry-87.html" target="_blank">この記事</a>中に書いてあるように，標準の関数ではないので、必要に応じて<a href="http://www.mathworks.com/matlabcentral/fileexchange/loadFile.do?objectId=1430&amp;objectType=file" target="_blank">MATLAB CentralのFile Exchange</a>からダウンロードしてください。（<a href="http://sach1o.blog80.fc2.com/blog-entry-43.html" target="_blank">arrow3の使い方はこちらを参照してください</a>。）<br /><blockquote>%&nbsp;3次元の例　：　螺旋曲線の接線（赤）と従法線（緑）<br />divn&nbsp;=&nbsp;200;<br />theta&nbsp;=&nbsp;linspace(0,&nbsp;5*pi,&nbsp;divn);<br />theta2&nbsp;=&nbsp;linspace(0,&nbsp;pi/3,&nbsp;divn);<br /><br />ppp&nbsp;=&nbsp;2*[cos(theta).*cos(theta2);&nbsp;sin(theta).*cos(theta2);&nbsp;sin(theta2)];<br />tvec&nbsp;=&nbsp;tangent_numeric(ppp);<br />bvec&nbsp;=&nbsp;binormal_numeric(ppp);<br /><br />figure(&nbsp;'InvertHardcopy',&nbsp;'off',&nbsp;'Color',&nbsp;[1&nbsp;1&nbsp;1],&nbsp;'Position',&nbsp;[2&nbsp;300&nbsp;400&nbsp;300]);<br />xlabel({'x'},&nbsp;'FontName','Times&nbsp;New&nbsp;Roman');<br />ylabel({'y'},&nbsp;'FontName','Times&nbsp;New&nbsp;Roman');<br />zlabel({'z'},&nbsp;'FontName','Times&nbsp;New&nbsp;Roman');<br />hold&nbsp;on;<br />nn=140;<br />plot3(ppp(1,:),ppp(2,:),ppp(3,:));<br />axis&nbsp;equal;<br />arrow3(ppp(:,nn)',[ppp(:,nn)+tvec(:,nn)]',&nbsp;'r-',&nbsp;0.1,&nbsp;0.2,&nbsp;0.1);<br />arrow3(ppp(:,nn)',[ppp(:,nn)+bvec(:,nn)]',&nbsp;'g-',&nbsp;0.1,&nbsp;0.2,&nbsp;0.1);<br />view(-18,26);</blockquote><br /><a href="http://blog-imgs-27.fc2.com/s/a/c/sach1o/binormal003.png" target="_blank"><img src="http://blog-imgs-27.fc2.com/s/a/c/sach1o/binormal003.png" alt="" border="0" /></a><br /><br />ヘルプ付きのmファイルは下記よりダウンロードしてください。<br /><br /><i>参考：<a href="http://www.mathworks.com/matlabcentral/fileexchange/loadFile.do?objectId=1430&amp;objectType=file" target="_blank">MATLAB Central File Exchange - Arrow3 version 4.58</a></i><br /><i>参考：<a href="http://sach1o.blog80.fc2.com/blog-entry-43.html" target="_blank">初心者によるMATLABメモ｜ 3次元のグラフィックスで矢印を表示する</a></i><br /><i>参考：<a href="http://sach1o.blog80.fc2.com/blog-entry-87.html" target="_blank">初心者によるMATLABメモ｜ 点列から接線ベクトルを求める（FastCode）</a></i><br /><i>ダウンロード：<a id="binormal_numeric" name="binormal_numeric" href="http://sach1o.web.fc2.com/files/geom.zip" target="_blank">このエントリのmファイル</a>　左クリックでお願いします。</i>（リファラを送信しない場合は，アクセス拒否になってしまいます）<br /> ]]>
</content:encoded>
<dc:subject>Geometry</dc:subject>
<dc:date>2008-01-23T18:05:02+09:00</dc:date>
<dc:creator>sach1o</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
<item rdf:about="http://sach1o.blog80.fc2.com/blog-entry-93.html">
<link>http://sach1o.blog80.fc2.com/blog-entry-93.html</link>
<title>ベジェ曲面（Beizer Surface）</title>
<description> なんとなく書いたBeizer曲面の関数bezierSurf()です。ベジエ曲面自体については、このあたりを参考にしてください。また、コードは綺麗でない、というかかなりわかりづらいので省略します。興味のある人はダウンロードしたmファイルを覗いてみてください。（ダウンロードはこちらから）簡単な使い方，使用例の順に示します。まずは、ベジェ曲面の関数bezierSurf()の簡単な使用方法です。2つのパラメータと制御メッシュ（Control Po
 </description>
<content:encoded>
<![CDATA[ なんとなく書いたBeizer曲面の関数bezierSurf()です。<br />ベジエ曲面自体については、<a href="http://www.sra.co.jp/people/aoki/Kjo/Manuals/Kjo/Surface/Bezier/Bezier.htm" target="_blank">このあたり</a>を参考にしてください。<br />また、コードは綺麗でない、というかかなりわかりづらいので省略します。<br />興味のある人はダウンロードしたmファイルを覗いてみてください。（ダウンロードは<a href="#beziersurf">こちら</a>から）<br />簡単な使い方，使用例の順に示します。<br /><br />まずは、ベジェ曲面の関数bezierSurf()の簡単な使用方法です。<br />2つのパラメータと制御メッシュ（Control Points）が引数となっています。<br /><blockquote>XYZ = bezierSurf(UU, VV, CPS)　…　CPSを制御メッシュとするN次ベジエ曲面のパラメータ(U,V)における座標を返す．<br />XYZ = bezierSurf(UU, VV, CPSX, CPSY, CPSZ) 　…　制御点のx座標をCPSX，y座標をCPSY，z座標をCPSZとした制御メッシュのN次ベジエ曲面のパラメータ(U,V)における座標を返す．<br />[X,Y,Z] = bezierSurf(UU, VV, CPS)　…　CPSを制御メッシュとするN次ベジエ曲面のパラメータ(U,V)における座標x,y,zごとに返す．<br /><br />パラメータUU, VVは，0以上1以下の実数配列で与える必要がある．<br />制御メッシュ点列CPSは，1つの3次元の実数行列で与える必要がある．<br />制御メッシュ点列CPSX, CPSY, CPSZは，3つの同じ次元を持つ2次元の実数行列で与える必要がある．</blockquote><br />使用例として、まず単にxy平面となるような双5次ベジェ曲面の制御点を指定して，u=v=0.5としたときを計算した例です。<br />見て分かるように基本的には3次元行列として座標は出力されます。<br />(:,:,1)がx座標、(:,:,2)がy座標、(:,:,3)がz座標です。<br /><blockquote>&gt;&gt;&nbsp;[x,y]&nbsp;=&nbsp;meshgrid([0:5]);<br />&gt;&gt;&nbsp;z&nbsp;=&nbsp;zeros(size(x));<br />&gt;&gt;&nbsp;bezierSurf(1/2,1/2,x,y,z)<br /><br />ans(:,:,1)&nbsp;=<br />&nbsp;&nbsp;&nbsp;&nbsp;2.5000<br /><br />ans(:,:,2)&nbsp;=<br />&nbsp;&nbsp;&nbsp;&nbsp;2.5000<br /><br />ans(:,:,3)&nbsp;=<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0</blockquote><br />違う例として、まず単にz座標を乱数とした制御メッシュを持つ双3次ベジェ曲面の座標です。<br /><blockquote>&gt;&gt;&nbsp;[x,y]&nbsp;=&nbsp;meshgrid([0:3]);<br />z&nbsp;=&nbsp;rand(size(x));<br />cps&nbsp;=&nbsp;zeros(4,4,3);<br />cps(:,:,1)&nbsp;=&nbsp;x;<br />cps(:,:,2)&nbsp;=&nbsp;y;<br />cps(:,:,3)&nbsp;=&nbsp;z;<br />bezierSurf([0,&nbsp;0.3,&nbsp;1],&nbsp;[0,0,0],&nbsp;cps)<br /><br />ans(:,:,1)&nbsp;=<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;0.9000&nbsp;&nbsp;&nbsp;&nbsp;3.0000<br /><br /><br />ans(:,:,2)&nbsp;=<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br /><br /><br />ans(:,:,3)&nbsp;=<br />&nbsp;&nbsp;&nbsp;&nbsp;0.2769&nbsp;&nbsp;&nbsp;&nbsp;0.4894&nbsp;&nbsp;&nbsp;&nbsp;0.1869</blockquote><br />また、出力を3つにすることでx,y,z座標をばらばらに取得することが可能です。<br /><blockquote>&gt;&gt;&nbsp;[bx,by,bz]&nbsp;=&nbsp;bezierSurf([0,&nbsp;0.3,&nbsp;1],&nbsp;[0,0,0],&nbsp;cps)<br /><br />bx&nbsp;=<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;0.9000&nbsp;&nbsp;&nbsp;&nbsp;3.0000<br /><br />by&nbsp;=<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br /><br />bz&nbsp;=<br />&nbsp;&nbsp;&nbsp;&nbsp;0.2769&nbsp;&nbsp;&nbsp;&nbsp;0.4894&nbsp;&nbsp;&nbsp;&nbsp;0.1869</blockquote><br />最後に関数bezierSurf()を用いてベジエ曲面を表示してみるとこんな感じです。<br />同時に制御メッシュも表示してみました。<br /><blockquote>%&nbsp;制御点<br />nn=6;<br />pts&nbsp;=&nbsp;[[0,1,2,3,4,5,0,0,0,0,0,0,0.97358,1.6353,0.70145,0.41548,0.45184,0.86041];<br />[0,1,2,3,4,5,1,1,1,1,1,1,0.87172,1.5897,1.878,0.60249,0.34142,0.36963];<br />[0,1,2,3,4,5,2,2,2,2,2,2,0.89357,1.2886,1.7519,0.94185,0.45533,1.8098];<br />[0,1,2,3,4,5,3,3,3,3,3,3,0.6127,0.75722,1.1003,0.46098,0.8714,1.9595];<br />[0,1,2,3,4,5,4,4,4,4,4,4,1.017,1.6232,1.245,1.6886,0.6222,0.87774];<br />[0,1,2,3,4,5,5,5,5,5,5,5,1.0215,1.0657,1.1741,0.38953,1.8468,0.22224]];<br /><br />cps&nbsp;=&nbsp;zeros(nn,nn,3);<br />cps(:,:,1)&nbsp;=&nbsp;pts(:,1:6);<br />cps(:,:,2)&nbsp;=&nbsp;pts(:,7:12);<br />cps(:,:,3)&nbsp;=&nbsp;pts(:,13:18);<br /><br />%&nbsp;グラフィック表示<br />figure(&nbsp;'Name','Bezier&nbsp;Surface',&nbsp;'Color',&nbsp;[1,1,1],&nbsp;&nbsp;'Position',&nbsp;[100,200,600,300]);<br /><br />hold&nbsp;on;<br />[uu,vv]&nbsp;=&nbsp;meshgrid(linspace(0,1,30));<br />bez1&nbsp;=&nbsp;bezierSurf(uu,vv,cps);<br />ax1&nbsp;=&nbsp;subplot(1,2,1),&nbsp;surf(bez1(:,:,1),bez1(:,:,2),bez1(:,:,3),&nbsp;'FaceColor',&nbsp;'interp',&nbsp;'EdgeColor',&nbsp;'none',&nbsp;'FaceLighting','phong');<br />set(ax1,&nbsp;'Position',&nbsp;[0.05,&nbsp;0.05,&nbsp;0.45,&nbsp;0.9]);<br />axis&nbsp;equal;<br />view(-17,40);<br />title(&nbsp;'Bezier&nbsp;Surface',&nbsp;'FontSize',&nbsp;12,&nbsp;'FontWeight',&nbsp;'bold',&nbsp;'Color',&nbsp;[0,0,0],&nbsp;'FontName',&nbsp;'Arial');<br /><br />ax2&nbsp;=&nbsp;subplot(1,2,2),&nbsp;mesh(cps(:,:,1),&nbsp;cps(:,:,2),&nbsp;cps(:,:,3),&nbsp;1.6*ones(nn),&nbsp;'Marker',&nbsp;'o',&nbsp;'FaceColor',&nbsp;'none');<br />set(ax2,&nbsp;'Position',&nbsp;[0.5,&nbsp;0.05,&nbsp;0.45,&nbsp;0.9]);<br />axis&nbsp;equal;<br />view(-17,40);<br />title(&nbsp;'Control&nbsp;Mesh',&nbsp;'FontSize',&nbsp;12,&nbsp;'FontWeight',&nbsp;'bold',&nbsp;'Color',&nbsp;[0,0,0],&nbsp;'FontName',&nbsp;'Arial');<br /><br />caxis([0,2]);</blockquote><br /><a href="http://blog-imgs-27.fc2.com/s/a/c/sach1o/beziersurf.png" target="_blank"><img src="http://blog-imgs-27.fc2.com/s/a/c/sach1o/beziersurf.png" alt="bezierSurf" border="0" /></a><br clear="all" /><br /><br />この関数beizerSurf()のダウンロードは↓から左クリックでお願いします。<br /><br /><i>参考：<a href="http://www.sra.co.jp/people/aoki/Kjo/Manuals/Kjo/Surface/Bezier/Bezier.htm" target="_blank">Bezier Surface</a></i><br /><i>参考：<a href="http://sach1o.blog80.fc2.com/blog-entry-36.html" target="_blank">初心者によるMATLABメモ｜ ベジェ曲線とバーンスタイン基底関数</a></i><br /><i>ダウンロード：<a id="beziersurf" name="beziersurf" href="http://sach1o.web.fc2.com//files/beziersurf.zip" target="_blank">このエントリのmファイル</a>　左クリックでお願いします。</i>　（リファラを送信しない場合は，アクセス拒否になってしまいます） ]]>
</content:encoded>
<dc:subject>Geometry</dc:subject>
<dc:date>2008-01-22T22:31:36+09:00</dc:date>
<dc:creator>sach1o</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
<item rdf:about="http://sach1o.blog80.fc2.com/blog-entry-92.html">
<link>http://sach1o.blog80.fc2.com/blog-entry-92.html</link>
<title>ディレクトリ（フォルダ）選択ダイアログを使用する</title>
<description> ディレクトリ（フォルダ）選択ダイアログを使用するGUIを使って読み込むファイルを指定する方法をこちらの記事で、書き込むファイルを指定する方法をこちらの記事で紹介しました。ここでは今度はディレクトリ（フォルダ）を選択する方法です。ディレクトリに読み込む、書き込むという概念はもちろんないので、どちらの場合でも使えます。ディレクトリを選択する場合には、uigetdirを使います。基本な使い方は下記です。引数に関し
 </description>
<content:encoded>
<![CDATA[ ディレクトリ（フォルダ）選択ダイアログを使用する<br />GUIを使って読み込むファイルを指定する方法を<a href="http://sach1o.blog80.fc2.com/blog-entry-88.html" target="_blank">こちらの記事で</a>、書き込むファイルを指定する方法を<a href="http://sach1o.blog80.fc2.com/blog-entry-90.html" target="_blank">こちらの記事</a>で紹介しました。<br />ここでは今度はディレクトリ（フォルダ）を選択する方法です。ディレクトリに読み込む、書き込むという概念はもちろんないので、どちらの場合でも使えます。<br /><br />ディレクトリを選択する場合には、<a href="http://dl.cybernet.co.jp/matlab/support/manual/r13/toolbox/matlab/ref/?/matlab/support/manual/r13/toolbox/matlab/ref/uigetdir.shtml" target="_blank">uigetdir</a>を使います。基本な使い方は下記です。引数に関してはどちらも省略可能です。<br /><blockquote>directory_path&nbsp;=&nbsp;uigetdir('表示されたときに選択されているディレクトリ','ダイアログのコメント')<br /><br />※directory_path　…　選択したディレクトリのパス（失敗もしくは未選択、キャンセルなら0が返ります）<br /></blockquote><br />以下、実際に使ってみます。<br />例えば引数を省略して下記とすると，図のようなダイアログが表示され、ディレクトリを選択することが出来ます。返り値として選択したディレクトリのパスが返ります。<br />ディレクトリ（フォルダ）選択ダイアログ自体に関しては，特に説明は要らないと思うので省略します。<br /><blockquote>&gt;&gt;&nbsp;dpath&nbsp;=&nbsp;uigetdir<br />dpath&nbsp;=<br />C:&yen;sach1o&yen;MATLAB</blockquote><br /><a href="http://blog-imgs-27.fc2.com/s/a/c/sach1o/uigetdir02.png" target="_blank"><img src="http://blog-imgs-27.fc2.com/s/a/c/sach1o/uigetdir02s.png" alt="uigetdir002" border="0" /></a><br clear="all" /><br />また，第1引数にパスを与えるとダイアログが表示されたときに、指定したディレクトリが選択された状態になります。<br /><blockquote>&gt;&gt;&nbsp;dpath&nbsp;=&nbsp;uigetdir('C:&yen;sach1o&yen;MATLAB')</blockquote><br />また、第2引数は「ダイアログのコメント」と書きましたが、これはメニューバーのタイトルではなくて、下の画像の赤い線で囲んだ部分のコメントになります。これはOSによっても変わるかと思います。<br /><blockquote>&gt;&gt;&nbsp;dpath&nbsp;=&nbsp;uigetdir('','プロジェクトフォルダの指定')</blockquote><br /><a href="http://blog-imgs-27.fc2.com/s/a/c/sach1o/uigetdir01.png" target="_blank"><img src="http://blog-imgs-27.fc2.com/s/a/c/sach1o/uigetdir01s.png" alt="uigetdir001" border="0" /></a><br clear="all" /><br />実際に使うなら、こんな感じ↓でしょうか？<br />これは簡単すぎますが、この例では最初にディレクトリを指定し、今回の実行に関するファイルは全て指定したのディレクトリに保存しています。<br />それとif文の部分でディレクトリがちゃんと指定されたかをチェックしています。<br /><blockquote>dpath&nbsp;=&nbsp;uigetdir('','プロジェクトフォルダの指定');<br /><br />if&nbsp;dpath==0&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;error('プロジェクトフォルダが選択されていません。');<br />else&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;A&nbsp;=&nbsp;rand(3);<br />&nbsp;&nbsp;&nbsp;&nbsp;B&nbsp;=&nbsp;rand(3);<br />&nbsp;&nbsp;&nbsp;&nbsp;save(fullfile(dpath,'dataA.mat'),&nbsp;'A');<br />&nbsp;&nbsp;&nbsp;&nbsp;save(fullfile(dpath,'dataB.mat'),&nbsp;'B');<br />&nbsp;&nbsp;&nbsp;&nbsp;save(fullfile(dpath,'dataAll.mat'));<br />end;</blockquote><br />実際に指定したディレクトリをdirしてみると下記のようにちゃんと指定したディレクトリにmatファイルが保存されたことが確認できます。<br /><blockquote>&gt;&gt;&nbsp;dir(dpath)<br />.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;..&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataA.mat&nbsp;&nbsp;&nbsp;&nbsp;dataAll.mat&nbsp;&nbsp;dataB.mat</blockquote><br /><i>参考：<a href="http://dl.cybernet.co.jp/matlab/support/manual/r13/toolbox/matlab/ref/?/matlab/support/manual/r13/toolbox/matlab/ref/uigetdir.shtml" target="_blank">MATLAB：マニュアル:MATLAB:関数：サイバネットシステム-MATLAB Function Reference - uigetdir</a></i><br /><i>参考：<a href="http://sach1o.blog80.fc2.com/blog-entry-88.html" target="_blank">初心者によるMATLABメモ｜ ファイルダイアログから読み込むファイルを指定する</a></i><br /><i>参考：<a href="http://sach1o.blog80.fc2.com/blog-entry-90.html" target="_blank">初心者によるMATLABメモ｜ ファイルダイアログを使って保存するファイル名を指定する</a></i> ]]>
</content:encoded>
<dc:subject>ファイル操作</dc:subject>
<dc:date>2008-01-13T18:50:58+09:00</dc:date>
<dc:creator>sach1o</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
</rdf:RDF>