0001 function [SETTINGS]=user_defined_method(SETTINGS)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015 SETTINGS.calculate_region_of_stability = 1;
0016
0017 kind_of_method=questdlg('Runge-Kutta-Method or Multistep Method?', ...
0018 'Kind OF Method', ...
0019 'RKM', 'MSM','RKM');
0020
0021 switch kind_of_method,
0022 case 'RKM'
0023 SETTINGS.isRKV = 1;
0024 SETTINGS.method='eigenesRKV';
0025
0026 if exist('data\default_value_stufen.mat','file')
0027 load data\default_value_stufen.mat
0028 defAns={num2str(stufen)};
0029 else
0030 defAns={''};
0031 end
0032
0033 get_input=inputdlg('How many stages has the RKM?','',1,defAns);
0034 stufen=str2num(get_input{1});
0035
0036 save data\default_value_stufen.mat stufen
0037
0038 if exist('data\default_value.mat','file')
0039 load data\default_value.mat
0040 if length(defAns_B)~=stufen
0041 delete default_value.mat
0042 clear defAns_B defAns_a defans_c
0043 for i=1:stufen
0044 defAns_B(i,1:stufen)=ones(1,stufen);
0045 end
0046 defAns_c=ones(1,stufen);
0047 defAns_a=ones(1,stufen);
0048 end
0049 else
0050 for i=1:stufen
0051 defAns_B(i,1:stufen)=ones(1,stufen);
0052 end
0053 defAns_c=ones(1,stufen);
0054 defAns_a=ones(1,stufen);
0055 end
0056
0057
0058
0059 get_input = inputdlg('Enter the bottom vector of the Butcher-Tableau','',[1],{num2str(defAns_c)});
0060 SETTINGS.c = str2num(get_input{1});
0061
0062 test1=1;
0063 while test1==1
0064
0065 if sum(SETTINGS.c)~=1
0066 aenderung = questdlg('The sum of this values is not equal to 1.', ...
0067 '', ...
0068 'continue', 'change','continue');
0069 switch aenderung
0070
0071 case 'continue'
0072 test1=0;
0073
0074 case 'change'
0075 defAns_c=SETTINGS.c;
0076 get_input=inputdlg('Enter the bottom vector of the Butcher-Tableau','',[1],{num2str(defAns_c)});
0077 SETTINGS.c=str2num(get_input{1});
0078 end
0079 else
0080 test1=0;
0081 end
0082
0083 end
0084
0085 get_input=inputdlg('Enter the left side vector of the Butcher-Tableau ','',[1],{num2str(defAns_a)});
0086 SETTINGS.a=str2num(get_input{1});
0087
0088
0089 for i=1:stufen
0090 promt{i}=['Enter row number ',num2str(i),' of the methods matrix'];
0091 defAns_cell{i}=num2str(defAns_B(i,1:stufen));
0092 end
0093
0094 get_input=inputdlg(promt,'matrix',1,defAns_cell);
0095
0096 for i=1:stufen
0097 SETTINGS.B(i,1:stufen)=str2num(get_input{i});
0098 end
0099
0100 test2=1;
0101 while test2==1
0102
0103 logic_val=(sum(SETTINGS.B')==SETTINGS.a);
0104
0105 if sum(logic_val)~=stufen
0106 aenderung=questdlg('The sum of some rows is not equal to the corresponding entry of the left hand side vector.', ...
0107 '', ...
0108 'continue', 'change','continue');
0109 switch aenderung
0110
0111 case 'continue'
0112 test2=0;
0113
0114 case 'change'
0115 for i=1:stufen
0116 defAns_cell{i}=num2str(SETTINGS.B(i,1:stufen));
0117 end
0118
0119 for i=1:stufen
0120 if sum(SETTINGS.B(i,1:stufen))~=SETTINGS.a(i)
0121 promt{i}=['The sum of this row should be ',num2str(SETTINGS.a(i))];
0122 else
0123 promt{i}=['This row is ok'];
0124 end
0125 end
0126
0127 get_input=inputdlg(promt,'matrix',1,defAns_cell);
0128
0129 for i=1:stufen
0130 SETTINGS.B(i,1:stufen)=str2num(get_input{i});
0131 end
0132
0133 defAns_B=SETTINGS.B;
0134
0135 end
0136 else
0137 test2=0;
0138 end
0139
0140 end
0141
0142
0143
0144 defAns_B=SETTINGS.B;
0145 defAns_c=SETTINGS.c;
0146 defAns_a=SETTINGS.a;
0147
0148 save data\default_value.mat defAns_B defAns_c defAns_a
0149
0150
0151 case 'MSM'
0152 SETTINGS.isRKV = 0;
0153 SETTINGS.method='eigenesMSV';
0154
0155 if exist('data\default_value_stufen.mat','file')
0156 load data\default_value_stufen.mat
0157 defAns={num2str(stufen)};
0158 else
0159 defAns={''};
0160 end
0161
0162
0163 get_input=inputdlg('How many stages has the MSM?','',1,defAns);
0164 stufen=str2num(get_input{1});
0165
0166 save data\default_value_stufen.mat stufen
0167
0168 stufen=stufen+1;
0169
0170 if exist('data\default_value_msv.mat','file')
0171 load data\default_value_msv.mat
0172 if length(defAns_sigma)~=stufen
0173 delete default_value_msv.mat
0174 clear defAans_sigma defAns_rho
0175 defAns_sigma=ones(1,stufen);
0176 defAns_rho=ones(1,stufen);
0177 end
0178 else
0179 defAns_sigma=ones(1,stufen);
0180 defAns_rho=ones(1,stufen);
0181 end
0182
0183 get_input=inputdlg('Enter the coefficients from the left side','',[1],{num2str(defAns_rho)});
0184 SETTINGS.rho=str2num(get_input{1});
0185
0186 test1=1;
0187 while test1==1
0188
0189 if sum(SETTINGS.rho)~=0
0190 aenderung=questdlg('The sum of this values is not equal to 0.', ...
0191 '', ...
0192 'continue', 'change','continue');
0193 switch aenderung
0194
0195 case 'continue'
0196 test1=0;
0197
0198 case 'change'
0199 defAns_rho=SETTINGS.rho;
0200 get_input=inputdlg('Please enter again','',[1],{num2str(defAns_rho)});
0201 SETTINGS.rho=str2num(get_input{1});
0202 end
0203 else
0204 test1=0;
0205 end
0206
0207 end
0208
0209 get_input=inputdlg('Enter the coefficients from the right side','',[1],{num2str(defAns_sigma)});
0210 SETTINGS.sigma=str2num(get_input{1});
0211
0212 defAns_sigma=SETTINGS.sigma;
0213 defAns_rho=SETTINGS.rho;
0214
0215 save data\default_value_msv.mat defAns_sigma defAns_rho
0216
0217 end
0218 end