inscribedsquare.gms : 내접사각형 문제

설명

내접 사각형 문제는 사각 말뚝 문제라고도 알려져 있습니다.
테플리츠의 추측은 기하학에서 풀리지 않은 문제이다:

  모든 평면의 단순 폐곡선은 4개의 꼭지점을 모두 포함합니까?
  약간의 정사각형?

소형 모델 유형 :DNLP


카테고리 : 슬롯 커뮤니티 모델 라이브러리


메인 파일 : inscribedsquare.gms

$title 내접사각형 문제(INSCRIBEDSQUARE,SEQ=425)

$onText
내접제곱 문제는 사각못 문제라고도 알려져 있습니다.
테플리츠의 추측은 기하학에서 풀리지 않은 문제이다:

  모든 평면의 단순 폐곡선은 4개의 꼭지점을 모두 포함합니까?
  약간 정사각형?

이는 곡선이 볼록하거나 부분적으로 매끄러우며 다른 경우에도 마찬가지입니다.
특별한 경우. 이 문제는 1911년 Otto Toeplitz가 제안했습니다.
https://en.wikipedia.org/wiki/Inscribed_square_problem도 참조하세요.

이 모델은 주어진 곡선에 대한 최대 면적의 제곱을 계산합니다.

--fx 및 --fy 옵션을 사용하여 닫힌 개체의 x 및 y 좌표를 지정합니다.
변수 t의 함수인 곡선. 여기서 t의 범위는 -pi에서 pi까지입니다.
--gnuplot 1 옵션을 사용하여 곡선 및 계산된 제곱 플롯을 활성화합니다.
gnuplot 사용(사용 가능하고 실행 가능한 솔루션을 찾은 경우)

기여자: Benjamin Mueller 및 Felipe Serrano
$offText

*$set fx 죄(t)*cos(t)
*$set fy sin(t)*t

*$set fx cos(t-t*t)*sin(t)-t*t*sin(2*t+3*abs(t))
*$set fy sin(t)*t+0.5*t*t*cos(t)

$fx를 설정하지 않은 경우 $set fx sin(t) * cos(t-t*t)
$설정되지 않은 경우 fy $set fy t * sin(t)

$매크로 FX(t) %fx%
$매크로 fy(t) %fy%

$gnuplot이 설정되지 않은 경우 $set gnuplot 0

"사각형의 모서리 점" / 1*4 / 설정;
변수
  z "최대화할 사각형 영역",
  t(i) "곡선의 정사각형 모서리 점 위치",
  x "정사각형의 왼쪽 하단 모서리의 x 좌표 (=fx(t('1')))",
  y "정사각형의 왼쪽 하단 모서리의 y 좌표 (=fy(t('1')))";
양수 변수
  "정사각형의 왼쪽 아래 모서리와 오른쪽 아래 모서리 사이의 수평 거리",
  b "사각형의 왼쪽 아래 모서리와 오른쪽 아래 모서리 사이의 수직 거리";

t.lo(i) = -pi;
t.up(i) = 파이;

방정식
  obj "정사각형의 면적, 제곱"
  e1x "왼쪽 하단 모서리의 x 좌표를 정의합니다",
  e1y "왼쪽 하단 모서리의 y 좌표를 정의합니다",
  e2x "오른쪽 아래 모서리의 x 좌표를 정의합니다",
  e2y "오른쪽 아래 모서리의 y 좌표를 정의합니다",
  e3x "왼쪽 위 모서리의 x 좌표를 정의합니다",
  e3y "왼쪽 위 모서리의 y 좌표를 정의합니다",
  e4x "오른쪽 상단 모서리의 x 좌표를 정의합니다",
  e4y "오른쪽 상단 모서리의 y 좌표를 정의합니다";

obj..z =E= sqr(a) + sqr(b);
e1x..fx(t('1')) =E= x;
e1y..fy(t('1')) =E= y;
e2x.. fx(t('2')) =E= x + a;
e2y..fy(t('2')) =E= y + b;
e3x.. fx(t('3')) =E= x - b;
e3y.. fy(t('3')) =E= y + a;
e4x.. fx(t('4')) =E= x + a - b;
e4y.. fy(t('4')) =E= y + a + b;

모델 m / 모두 /;

* (a,b)=0 해에서 벗어나기 위한 시작점
t.l(i) = -pi + (ord(i)-1) * 2*pi/카드(i);
x.l = fx(t.l('1'));
y.l = fy(t.l('1'));
a.l = 1;
b.l = 1;

DNLP를 사용하여 m max z를 해결합니다.

파일 f / '%슬롯 커뮤니티scrdir%gnuplot.in' /;
if( %gnuplot% 및
 (m.modelstat = %modelStat.optimal% 또는
  m.modelstat = %modelStat.locallyOptimal% 또는
  m.modelstat = %modelStat.feasibleSolution%),
  f.nd=6;
  f.nw=0;
  f를 넣어;
  '크기 비율 설정 -1' 입력 /;
  '샘플 1000개 설정'을 입력하세요. /;
  'x.l',' y.l에서 '객체 1 다각형 설정'을 넣습니다.
  '(x.l+a.l) ','(y.l+b.l)에 '를 넣습니다.
  '(x.l+a.l-b.l) ','(y.l+a.l+b.l)에 '를 넣습니다.
  '(x.l-b.l) ','(y.l+a.l)에 '를 넣습니다.
  'x.l'에 '를 넣고,'y.l/;
  '객체 설정 1 fc rgb "파란색" 채우기 스타일 단색 0.1 테두리 lt -1' /;
  '파라메트릭 설정'을 입력하세요. /;
  put '범위 설정 [-pi:pi]' /;
  put 'plot %fx%, %fy%' /;
  '일시 중지 -1'을 입력하세요. /;
  닫다 f;
  'gnuplot %슬롯 커뮤니티scrdir%gnuplot.in'을 실행합니다.
  'rm %슬롯 커뮤니티scrdir%gnuplot.in'을 실행합니다.
);