2013-06-12 39 views
0

考慮下面的MATLAB代碼片段:不知道爲什麼與指數誤差在Matlab發生

g = @(x, t)x.*0; 
u_explizit = explizit_Euler(20, 800, 1, 1, zeros(21,1), g, [1;2], 0, 0.1); 
figure 
surf(u_explizit); 
shading flat; 
title('Aufgabe 2 - Explizit Euler'); 

u_implizit = implizit_Euler(20, 800, 1, 1, zeros(21,1), g, [1;2], 0, 0.1); 

兩個功能explizit_Eulerimplizit_Euler開始用相同的命令(如圖所示爲explizit_Euler

function [u] = explizit_Euler(n, nt, T, kappa, u0, f, b, gN, gD) 

tau = T/nt; 

[A, z] = prepare_system(n, f, b, gN, gD); 
z = z'; 
... 
end 

功能prepare_system看起來像這樣:

function [ A, z] = prepare_system(n, f, b, gN, gD) 
%PREPARE_MATRIX_SYSTEM Prepares A_h and solution vector f_h 

    h = 1/n; 
    z = f((0:n)./n); 
... 
end 

explizit_Euler開始prepare_system的呼叫工作正常。然而,從implizit_Euler內通話提供了一個錯誤信息,我只是想不通爲什麼:

Subscript indices must either be real positive integers or logicals. 
Error in implizit_Euler (line 5) 
    z = f((0:n)./n); 

看來,MATLAB認爲f是矢量,因而它不能訪問f(0),這是有道理的如果f是一個向量。但是f是一個功能句柄!在explizit_Euler之前的代碼中,完全相同的代碼是如何工作的?

+0

喲確定你不使用f之前作爲一個向量? –

+0

@AnderBiguri是的,我剛剛檢查了我的腳本。另外,我重命名它,它仍然不起作用 – kaufmanu

+0

我發現,當調用implizit_Euler時,函數句柄變成矢量。我無法弄清楚爲什麼。 – kaufmanu

回答

1

我錯過了implizit_Euler(!)簽名中的參數 - 對不起,夥計們!

相關問題