2014-04-28 3 views
-2

방정식에서 매개 변수로 사용될 여러 값 조합을 생성하려고합니다. 문제는 컴퓨터가 너무 비싸고 컴퓨터가 멈추는 문제입니다. 3-4 매개 변수 만 있으면 for 루프가 정상적으로 작동하고 적당한 시간 내에 결과를 얻습니다. 그렇지 않으면, 그것은 단지 얼어 버린다!
다음은 코드입니다. 누군가가 이러한 숫자의 조합을 생성하는 효율적인 방법을 제공하여 전체 프로세스가 더 빨라지고 결과를 얻기 위해 며칠을 기다릴 필요가 없습니까? (그냥 간단한 시도)중첩 for 루프 문제 : 중첩 된 for 루프의 속도를 높이는 방법

>> a1 = 0.1; 
>> b1 = 0.2; 
>> a = a1 + [0 : 0.01 : 0.04] 

a = 

    0.1000 0.1100 0.1200 0.1300 0.1400 

>> b = b1 + [0 : 0.01 : 0.04] 

b = 

    0.2000 0.2100 0.2200 0.2300 0.2400 

>> aa, bb = ndgird(a, b) 
Undefined function or variable 'aa'. 

몇 가지 더 질문 : ANSWER1의 응답에 따라

UPDATE (1) 내가

을 그런 식으로 잘못 무엇

(2) 무엇 0.04라는 용어는 의미합니까?

(3) 매개 변수의 각 벡터에 요소의 수를 어떻게 지정합니까? 이 예제에서는 5 개의 값만 생성됩니다. 감사합니다.

+0

@Schorsch : 제발이 질문에 답하지 마십시오. 큰 방정식과 관련된 문제에 직면하고 있습니다. 나는이 문제를 해결할 수있는 다른 방법이 있는지 모르겠다. –

+0

-1 : 누군가가 효율적인 방법을 제공 할 수 있는가? ... - 문제 해결 이외의 노력은 무엇인가? 플로리스가 대답 한대로 : 당신이 정말로해야 할 일은 무엇입니까? 어쩌면 이것은 모든 단일 조합을 시도하는 대신 최적화 프로그램에 대한 문제점 일 수 있습니다. – Schorsch

답변

2

ndgrid을 사용하여 매개 변수 값에 대한 n 차원 눈금을 생성 할 수 있습니다.

예.

xx, yy = ndgrid([1,2,3],[0.1, 0.2,0.3]) 

2d에 대해 nd에 대해 더 많은 벡터를 추가하십시오.

2D 매개 변수는 다음 2 차원 배열에 저장된 매개 변수를해야하는 경우 예를 들어, 할 수있는 배열

[xx(:), yy(:),...] 

특정 값 귀하의 경우에는

당신은 벡터 각 벡터에 대응하도록 등등

a = a1 + [0 : 0.01 : 0.04] 
b = b2 + [0 : 0.01 : 0.04] 
c = c3 - [0 : 0.01 : 0.04] 
... 

또는 대안

a = a1 + linspace(0, 0.04, 5) 
b = b2 + linspace(0, 0.04, 5) 
c = c3 - linspace(0, 0.04, 5) 
... 

과를 사용할 필요가 스캔 할 값. 다음 고려

[aa, bb, cc, ...] = ndgrid(a, b, c,...) 
+0

답장을 보내 주셔서 감사합니다.하지만 안타깝게도 코드를 수정하는 방법을 따르지 못합니다. 조금 더 자세히 설명해 주시겠습니까? 내가 x12 = ndgrid ([1,2,3], [0.1, 0.2,0.3])까지 x1, x2를 수행해야하는 이유는 무엇입니까? 그리고 나는 0.01의 증분을 어떻게 포함합니까? –

+0

문서를 살펴 보았지만 서명 ndgrid ([1 2 3])의 용어를 이해하지 못했습니다. –

+1

@SrishtiM : 사용하지 않은 값은 예제가 아닙니다. 귀하의 시나리오에 대한 내 대답을 업데이 트 – jmetz

2

몇 가지 사용 : MATLAB이 과정에서 데이터를 복사, 더 많은 공간을 찾을 필요 유지 당신이하지 않는

1) 배열을 미리 할당, stor_param의 성장이 느려집니다 . 약 244 만입니다 bigN= 5^12; ...

2) 당신은 t은 인격적으로의 가능한 모든 값을 통해 모든 매개 변수를 반복하는 것을

stor_param=zeros(12,bigN); 

사용 주 또 다른 매우 큰 승수입니다.

이 두 가지 사항을 종합하면 효율적인 코드조차도 상당한 시간이 걸릴 것입니다. 나는 당신이 정말로해야 할 일에 대해 생각해보기를 권한다. (이 4E10 결과가있을 때 그들과 함께 무엇을 할 것인가 ... ...)

가장 빠른 해결책은 가장 적은 노력을하는 해결책이다. 지금 당신의 "알고리즘"은 무차별 적입니다 ...

편집 나는 어떤 종류의 최적을 찾으려고 노력하고 있습니다. 이것이 사실이라면 Matlab에 가능한 매우 효율적인 방법이 내장되어 있습니다. 대부분이 최적화 도구 상자에 있습니다. 이러한 기능을 사용하는 방법에 대한 온라인 예제가 많이 있습니다. 경계 제한 조건 (매개 변수 xx 이하 또는 yy보다 작음) 또는 연결 제약 조건 (aa < 2*bb) 중 하나 인 제약 조건을 추가하는 다양한 방법이 포함됩니다. 이러한 유형의 기술을 사용하면 현재 접근 방식보다 훨씬 쉽게 매개 변수 조합을 찾을 수 있습니다. ndgrid도 있기 때문에, 많은 시간, 여러 번 당신의 기능을 평가하고 있습니다 ...

+1

+1 [xy-problem] (http : // meta .stackexchange.com/questions/66377/what-is-the-xy-problem) 최적화 방법에 대해 자세히 설명합니다. – Schorsch