2009-10-11 3 views
0

반원의 꼭대기에 점을 그려 넣은 프로그램을 특정 간격으로 배치하고 직선을도에 쓰고 싶습니다. 이런 식으로 : __n__.MATLAB 조각 함수 + 벡터 조작

시간 도메인을 정의했으며 벡터 (t = 0:0.01:5)로 저장했습니다.

if t>=2|t<=2.3 
y = sqrt(.15^2-(t-2.15)^2); 

을하지만, MATLAB 만 평방 행렬의 제곱 할 수 없다는 오류 메시지가 생성 : 나는 시간 벡터의 요소를 사용하여 반원의 상단에있는 점을 정의 할 수 있다고 가정한다.

나는 내가 t 벡터의 요소를 제곱하고 싶어하지 전체 벡터 것을 보여주기 위해 인덱스를 활용하는 시도 : 이러한 실패 후

i = [200:230]; 
for t(200:230) 
y = sqrt(.15^2-(t(i)-2.15)^2); 

, 나는 눈치 그 중 하나가 열이있는 정방 행렬을 제곱 0이 아닌 요소는 첫 번째 행렬 요소의 제곱의 열이있는 새 사각형 행렬을 생성합니다. 행렬을 제곱 한 후에 여분의 0 열을 제거하는 방법이 있다면 행렬의 해당 특성을 사용하여 t 벡터의 값을 제곱 할 수 있습니다.

이 문제를 해결하는 가장 간단하고 효과적인 방법은 무엇입니까?

답변

1

반원형 "범프"가있는 가로선을 그리는 것처럼 들립니다. 다음은이 작업을 수행하는 방법은 다음과 같습니다 위의 솔루션에서

t = 0:0.01:5;  % Create the time vector 
y = zeros(size(t)); % Create a zero vector the same size as t 
index = find((t >= 2) & (t <= 2.3));  % Find a set of indices into t 
y(index) = sqrt(.15^2-(t(index)-2.15).^2); % Add the "bump" to y 
y(1:index(1)) = y(index(1));    % Add the line before the "bump" 
y(index(end):end) = y(index(end));   % Add the line after the "bump" 

, 라인을 이전과 약간 높거나 서로보다 낮을 수있다 "범프"후 (여기서 t 가을에 귀하의 샘플에 따라 다름). 당신은 선을 그릴 수 있으며, 마지막으로

index = (t >= 2) & (t <= 2.3);    % Find a set of logical indices 
y(index) = sqrt(.15^2-(t(index)-2.15).^2); % Add the "bump" to y 
% OPTION #1: 
y(~index) = y(find(index,1,'first')); % Use the first circle point as the height 
% OPTION #2: 
y(~index) = y(find(index,1,'last')); % Use the last circle point as the height 

: 당신은 그들이 같은 높이에 있는지 확인하려면 대신 다음과 같은 작업을 수행 할 수

plot(t,y); 
+0

이 설명이 도움이되었습니다. 다음은 내가 컴파일 한 코드입니다 : '% 전달 구성 요소의 구성 요소 : 북쪽 = 1.31 * 10^6 * [1 13.3]; south = [1 516.1 5.685 * 10^4 1.307 * 10^6 1.733 * 10^7]; h = tf (북쪽, 남쪽); % 시간 간격 : t = 0 : 0.01 : 5; % 조각 기능을 사용하여 속도계에서 점을 정의하십시오 : y = 제로 (크기 (t)); index = find ((t> = 2) & (t <= 2.3)); y (색인) = sqrt (.15^2- (t (색인) -2.15).^2); y ([1 : 색인 (1) 색인 (끝) : 끝]) = y (색인 (1)); 응답이있는 원형 지시 기능 : lsim (h, y, t); ' 감사합니다. –

1

잠시만 기다려주세요. 질문에 따라 벡터의 각 요소를 사각형로 만들겠습니까? 당신이 할 수있는 일은 다음과 같습니다

t.^2

.는 벡터 또는 배열에 element-wise operation in MATLAB을 나타냅니다.

둘째, 현재 문제를 이해 한 경우 t과 같은 기능을 포함하는 벡터 y를 만들려고합니다. t>=2 | t <=2.3?

그렇다면, 당신이 할 일은 이것이다 : 기본적으로

y = sqrt(0.15^2-(t((t>=2|t<=2.3))-2.15).^2));

, 나는 논리적 인덱스 (t>=2 | t<=2.3)t의 요소 만 (내가 원하는 어떤)에 액세스하는 데 사용을 만들었습니다.

또한 완전히 이해하지 못했습니다. 어떤을 달성하고 싶습니까? 반원형 곡선의 맨 위 점 (최대 점)을 플롯해야합니까?

+0

이 두 답변의 조합은 도움이되었습니다 아주 더.나는 반원의 지점에 들어가는 직선을 플롯하고 싶었고 자동차 섀시가 속도 범프 (반원으로 모델링 됨)를 통해 주행해야 할 응답과 함께 직선으로 돌아갑니다. 너의 t.^2 설명없이 나는 '.' 다른 대답은 오타였습니다. 감사합니다. –

+0

웃음, 환영합니다 ... upvotes도 환영합니다! – Jacob