Мой ответ состоит из двух частей. Часть 1 является математикой - чтобы дать ясность всем читателям потока и сделать понятным следующий код R. Часть 2 - программирование на R.
Точечное произведение двух векторов x и y можно определить как:
где || x || является евклидовой нормой (также известной как норма L 2 ) вектора x .
Управляя определением точечного произведения, мы можем получить:
где тета - угол между векторами x и y выражено в радианах. Обратите внимание, что тета может принимать значение, лежащее на отрезке от 0 до pi.
Решая для самой тета, мы получаем:
Чтобы перевести математику в R-код, нам нужно уметь выполнять два матричных (векторных) вычисления; скалярное произведение и евклидова норма (которая является специфическим типом нормы, известной как норма L 2 ). Нам также нужно знать R-эквивалент обратной косинус-функции, cos -1 sup>.
Начиная сверху. Ссылаясь на ?"%*%"
, скалярное произведение (также называемое внутренним произведением) может быть вычислено с использованием оператора %*%
. Со ссылкой на ?norm
функция norm()
(базовый пакет) возвращает a норму вектора. Здесь интересующей нормой является норма L 2 или, на языке справочной документации R, «спектральная» или «2» -норма. Это означает, что аргумент type
функции norm()
должен быть установлен равным "2"
. Наконец, функция обратного косинуса в R представлена функцией acos()
.
Решение
Оборудованный как математикой, так и соответствующими функциями R, можно создать функцию-прототип (то есть не производственный стандарт) - используя функции базового пакета - как показано ниже. Если приведенная выше информация имеет смысл, то последующая функция angle()
должна быть понятной без дальнейших комментариев.
angle <- function(x,y){
dot.prod <- x%*%y
norm.x <- norm(x,type="2")
norm.y <- norm(y,type="2")
theta <- acos(dot.prod / (norm.x * norm.y))
as.numeric(theta)
}
Проверка функции
Проверка, чтобы убедиться, что функция работает. Пусть x = (2,1) и y = (1,2). Продукт точек между x и y равен 4. Евклидова норма x равна sqrt (5). Евклидова норма y также является квадратом (5). cos theta = 4/5. Тета составляет примерно 0,643 радиана.
x <- as.matrix(c(2,1))
y <- as.matrix(c(1,2))
angle(t(x),y) # Use of transpose to make vectors (matrices) conformable.
[1] 0.6435011
Надеюсь, это поможет!
Мы используем WCFExtras для изменения имени хоста.
WCFExtras - это небольшая библиотека с открытым исходным кодом, которая позволит вам написать следующее для изменения имени хоста:
<behaviors>
<endpointBehaviors>
<behavior name="xxx">
<wsdlExtensions location="http://some-hostname-visible-from-outside/path-to-a-service/service.svc" singleFile="True" />
</behavior>
...
Для IIS7 вы не добавляете его в web.config, а в файл конфигурации IIS.
Прежде всего, отредактируйте привязки вашего веб-сайта, чтобы протокол HTTP указывал имя хоста, если вы еще этого не сделали - это обеспечит получение правильного имени в HTTP.
Перейдите в C: \ Windows \ System32 \ inetsrv \ config и откройте applicationHost.config
Найдите раздел сайтов. Вы увидите что-то вроде следующего
<sites>
<site name="Default Web Site" id="1">
<application path="/">
<virtualDirectory path="/" physicalPath="%SystemDrive%\inetpub\wwwroot" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:80:puck" />
<binding protocol="net.tcp" bindingInformation="808:*" />
<binding protocol="net.pipe" bindingInformation="*" />
<binding protocol="net.msmq" bindingInformation="localhost" />
<binding protocol="msmq.formatname" bindingInformation="localhost" />
<binding protocol="http" bindingInformation="*:80:puck.idunno.org" />
<binding protocol="http" bindingInformation="*:80:localhost" />
<binding protocol="https" bindingInformation="*:443:" />
</bindings>
</site>
....
</sites>
. Вы можете видеть, что привязки для протокола http определяют заголовок хоста, а https - нет. Когда вы просматриваете веб-страницы, вы не можете использовать заголовки хоста через HTTPS, но WCF по-прежнему использует их при генерации WSDL - если он не может найти его, он вернется к имени компьютера.
Итак, все, что вам нужно сделать, это отредактировать привязку HTTPS следующим образом
<binding protocol="https" bindingInformation="*:443:puck" />
, добавив правильное полное доменное имя в конец информации привязки. Сбросьте IIS и WCF должны получить его прямо сейчас.
Решение IIS6 уже было опубликовано darin
Этот пост решил эту проблему для меня. Мне нужно было связать мое доменное имя с моим IP-адресом и веб-сайтом в IIS.
Я добавил решения здесь, http://knowledgebaseworld.blogspot.com/2010/ 06 / имя-домена-заменено-имя-машины.html . он должен работать для вас всех, так как он отлично работает со мной на локальном, промежуточном и производственном уровнях без привязки к iis
Ни одно из этих решений не помогло мне. Я смог решить эту проблему с помощью очень простой Custom Service Factory.
Установка службы WCF на общий хостинг-сайт, повторное посещение