7

matlab から Excel でワークシートを開いて数式を編集することは可能ですか? アイデアは、前のセルからの値の各セルの不確実性を含む 2 番目のシートを作成することにより、不確実性分析を自動化することです。基本的に、セルを変数として扱い、各セルに対して SQRT(SUM(Partials(xi)^2)) を実行したいと考えています。Matlab は計算に問題はないはずですが、シート内の数式を編集できますか?

現在のプロセスは、Excel から Matlab にコピー アンド ペーストすることです。方程式の配列に対して matlab で不確実性を実行する小さな関数を次に示します。

function [f_u_total f_u] = uncertAnalysis(f, vars, vars_u)
    f_u = [];
    f_u_total = [];
    for(i=1:length(f))
        f(i)
        item = uncertAnalysisi(f(i), vars, vars_u);
        f_u = [f_u; item(1)];
        f_u_total = [f_u_total; item(1)];
    end
end


function [f_u_total f_u] = uncertAnalysisi(f, vars, vars_u)
    f_u = [];
    % take the partials and square them
    for i=1:length(vars)
        f_u = [f_u; vars(i) (diff(f, vars(i)).*vars_u(i)).^2];
    end
    % calculate the RSS
    f_u_total = (sum(f_u(:,2))).^.5;
end

余談ですが、方程式は次のようになります (これを手動で行っていない理由):

=(9*C!S3^2/C!V3^4*C!W3*(C!O3-
C!P3)/C!X3*C!Q3^6*C!F3^4/C!Y3^6/(C!U3^C!Z3)^6*F3^2+1/4*C!S3^2/C!V3^4*C!W3/(C!O3-
C!P3)/C!X3*C!Q3^6*C!F3^6/C!Y3^6/(C!U3^C!Z3)^6*O3^2+1/4*C!S3^2/C!V3^4*C!W3/(C!O3-
C!P3)/C!X3*C!Q3^6*C!F3^6/C!Y3^6/(C!U3^C!Z3)^6*P3^2+9*C!S3^2/C!V3^4*C!W3*(C!O3-
C!P3)/C!X3*C!Q3^4*C!F3^6/C!Y3^6/(C!U3^C!Z3)^6*Q3^2+1/C!V3^4*C!W3*(C!O3-
C!P3)/C!X3*C!Q3^6*C!F3^6/C!Y3^6/(C!U3^C!Z3)^6*S3^2+9*C!S3^2/C!V3^4*C!W3*(C!O3-
C!P3)/C!X3*C!Q3^6*C!F3^6/C!Y3^6/(C!U3^C!Z3)^6*C!Z3^2/C!U3^2*U3^2+4*C!S3^2/C!V3^6*C!W3*(C!O
3-C!P3)/C!X3*C!Q3^6*C!F3^6/C!Y3^6/(C!U3^C!Z3)^6*V3^2+1/4*C!S3^2/C!V3^4/C!W3*(C!O3-
C!P3)/C!X3*C!Q3^6*C!F3^6/C!Y3^6/(C!U3^C!Z3)^6*W3^2+1/4*C!S3^2/C!V3^4*C!W3*(C!O3-
C!P3)/C!X3^3*C!Q3^6*C!F3^6/C!Y3^6/(C!U3^C!Z3)^6*X3^2+9*C!S3^2/C!V3^4*C!W3*(C!O3-
C!P3)/C!X3*C!Q3^6*C!F3^6/C!Y3^8/(C!U3^C!Z3)^6*Y3^2+9*C!S3^2/C!V3^4*C!W3*(C!O3-
C!P3)/C!X3*C!Q3^6*C!F3^6/C!Y3^6/(C!U3^C!Z3)^6*LOG(C!U3)^2*Z3^2)^(1/2)
4

5 に答える 5

5

COM/ActiveX/Automation を介して実行できるはずです。External Interfacesドキュメントを見てください。Excel の Automation インターフェイスを介して Excel ドキュメントにアクセスする方法の例があります。

私は、この方法で Excel を操作した経験はほとんどありませんが、オートメーションを使用して Excel でほぼすべてのことを実行できることは知っています。

編集: Excel オブジェクト モデルへの参照が見つかりませんが、別の例を次に示します: http://support.microsoft.com/kb/301982

于 2009-02-23T20:43:16.937 に答える
2

編集: XLSWRITEが機能しないという私の以前の仮定は間違っていました。MATLABで次のことを試しました:

xlswrite('xltest.xls',{'1' '2' '=SUM(A1,B1)'});

ファイルをExcelで開いたとき、関数は実際にそこにありました! これに関する制限は、Excel にある関数のみを使用する必要があることです。

残念ながら、XLSREADが数式を MATLAB に読み込むことができるとは思えません (結果を取得するだけのようです)。

以前に提案されたオプション:

MathWorks の Web サイトでSpreadsheet Link EXソフトウェアをチェックしてみてください。他に調べる必要があるのはMATLAB Builder EXです。これにより、「MATLAB® アプリケーションを組織の Excel® ワークブックにマクロ関数またはアドインとして統合できます」。有望に聞こえます...

于 2009-02-23T19:51:16.453 に答える
2

これは非常に洗練されたソリューションではありませんが、.xls単にタブ区切り (または CSV) ファイルである新しいスプレッドシートを保存すると、Matlab で数式を生成でき、Excel でドキュメントを開くと値が入力されます。

Perl では、次のように処理しました。

open(出力,'>tmpfile.xls');
print OUTPUT "1\t2\t=A1+B1\n";
閉じる (出力);

を Excel で開くとtmpfile.xls、セルは 3 として表示され、またはが変更されたC1場合に適切に動的に更新されます。A1B1

(私はMatlabが苦手なので、プラグインの知識はありません)

于 2009-02-23T19:51:35.517 に答える
2

COM/ActiveX を使用します。次のコマンドを使用して、Excel インスタンスを開くことができます。

xlApp = COM.Excel.Application;

次に、コード補完と Excel 自体の VBA ヘルプを組み合わせて使用​​し、残りを解決します。

でExcelを閉じることを忘れないでください

xlApp.Quit;
delete(xlApp);

余談ですが、いわゆる CSE (Control-Shift-Enter) 式が役立つでしょうか? Googleを参照してください。

于 2009-02-25T16:57:32.643 に答える
1

別の方法として、Matlab から ActiveX を使用するための以下のコード (xlswrite) を参照してください。

http://www.mathworks.com/matlabcentral/fileexchange/2855

于 2009-06-02T02:23:52.820 に答える