Matlab: In function "fminsearch(fun,x0)" x0 not getting accepted as matrix -


in matlab documentation function fminsearch(fun,x0) , x0 can scalar, vector, or matrix. trying call function :

weight=2; delta_obj=@(k_to_perturb_annealing) gibbs_sampling_sisim_well_testing(k_to_perturb_annealing); k_to_perturb_annealing=fminsearch(delta_obj,k_to_perturb_annealing_initial); 

where, k_to_perturb_annealing_initial 101x82 matrix. getting stuck error on line k_to_perturb_annealing=fminsearch(delta_obj,k_to_perturb_annealing_initial);

error message:

??? subscripted assignment dimension mismatch. error in ==> fminsearch @ 195 fv(:,1) = funfcn(x,varargin{:}); error in ==> optimizing_by_perturbing_sisim_perm @ 31 k_to_perturb_annealing=fminsearch(delta_obj,k_to_perturb_annealing_initial); 

the function gibbs_sampling_sisim_well_testing(k_to_perturb_annealing) calling above is:

function[obj_fun]=gibbs_sampling_sisim_well_testing(k_to_perturb_annealing)  %% parameters  ncell=40000; a=((sqrt(ncell)*500*sqrt(ncell)*500))/43560; % area of reservoir in acres nw=5; % number of production wells xy_wells=[170,130,70,40,20;50,125,190,100,20]; % 1st , 2nd rows represent x , y coordinates respectively r_investigation=sqrt((a*43560)/(pi*nw)); % in ft r_inv_cells=ceil(r_investigation/500);  %% loading testing permeability values both drawdown , buildup  k_well_testing_dd_sisim=load('k_well_testing_dd_sisim'); k_well_testing_bup_sisim=load('k_well_testing_bup_sisim');  k_dd=struct2cell(k_well_testing_dd_sisim); k_dd=k_dd{1};  k_bup=struct2cell(k_well_testing_bup_sisim); k_bup=k_bup{1};  %% computing k_eff using testing perms , k_geomean using reference model of sisim simulated perms  %# computing effective permeability value testing k_eff=mean([mean(k_dd),mean(k_bup)]);  %# geomean value of permeability taken geomean of 2 times r_inv_cells perm values in x , y direction around 1 k_geomean=geomean(geomean(k_to_perturb_annealing));  %# storing coordinates of k_to_perturb_annealing  x=max(xy_wells(1,1)-r_inv_cells,1):min(xy_wells(1,1)+r_inv_cells,sqrt(ncell)); y=max(xy_wells(2,1)-r_inv_cells,1):min(xy_wells(2,1)+r_inv_cells,sqrt(ncell));  i=1:length(x)     xcoord_k_to_perturb_annealing(1:length(y),i)=x(i);     ycoord_k_to_perturb_annealing(1:length(y),i)=y; end  xcoord_k_to_perturb_annealing=reshape(xcoord_k_to_perturb_annealing,(length(y)*length(x)),1); ycoord_k_to_perturb_annealing=reshape(ycoord_k_to_perturb_annealing,(length(y)*length(x)),1);  %# changing gridded k_to_perturb_annealing vector form vector_k_to_perturb_annealing=reshape(k_to_perturb_annealing,(length(y)*length(x)),1);  %% reading perm_sampledata_for_annealing gslib .dat file using `gslib_file_to_mat_general.mat' function  nmodel_sampledata=3; ncell_sampledata=20; nmodel_want_sampledata=3; [perm_sampledata_for_annealing]=gslib_file_to_mat_general(nmodel_sampledata,ncell_sampledata,nmodel_want_sampledata,'perm_sampledata_5wells_sisim_for_annealing_gslib_format');  %# separating contents of file perm values , coordinates xcoord_perm_sampledata_for_annealing=perm_sampledata_for_annealing(:,1); ycoord_perm_sampledata_for_annealing=perm_sampledata_for_annealing(:,2); values_perm_sampledata_for_annealing=perm_sampledata_for_annealing(:,3); %% using variogram.mat function compute variogram values , lag distances  %# perm_sampledata_for_annealing  variogram_perm_sampledata=variogram([xcoord_perm_sampledata_for_annealing ycoord_perm_sampledata_for_annealing],values_perm_sampledata_for_annealing,'plotit',false,'nrbins',50,'anisotropy',true); variogram_perm_sampledata=struct2cell(variogram_perm_sampledata); gamma_perm_sampledata=variogram_perm_sampledata{1}; theta_perm_sampledata=(variogram_perm_sampledata{2})*(180/pi); h_perm_sampledata=variogram_perm_sampledata{4};  %# k_to_perturb_annealing  memory_cells=randperm(2000); % due lack of memory space, have use maximum of 2000 points variogram_k_to_perturb_annealing=variogram([xcoord_k_to_perturb_annealing(memory_cells) ycoord_k_to_perturb_annealing(memory_cells)],vector_k_to_perturb_annealing(memory_cells),'plotit',false,'nrbins',50,'anisotropy',true); variogram_k_to_perturb_annealing=struct2cell(variogram_k_to_perturb_annealing); gamma_k_to_perturb_annealing=variogram_k_to_perturb_annealing{1}; theta_k_to_perturb_annealing=(variogram_k_to_perturb_annealing{2})*(180/pi); h_k_to_perturb_annealing=variogram_k_to_perturb_annealing{4};   %% optimization , perturbation  weight=2; obj_fun=((gamma_perm_sampledata-gamma_k_to_perturb_annealing).^ weight)+((k_geomean-k_eff).^weight); 

i think problem

obj_fun=((gamma_perm_sampledata-gamma_k_to_perturb_annealing).^ weight)+((k_geomean-k_eff).^weight); 

you need change ((gamma_perm_sampledata-gamma_k_to_perturb_annealing).^ weight) scalar k_geomean scalar

try use (norm((gamma_perm_sampledata-gamma_k_to_perturb_annealing),2)^weight), or (norm((gamma_perm_sampledata-gamma_k_to_perturb_annealing),'fro')^weight) or ...


Comments

Popular posts from this blog

objective c - Change font of selected text in UITextView -

php - Accessing POST data in Facebook cavas app -

c# - Getting control value when switching a view as part of a multiview -