Я могу добавить ConnectionStrings к ConnectionStringCollection во времени выполнения?

Как указывает Роди, нормализация Mathematica использует, чтобы сделать последний элемент единицей. Другой eig функционирует подобно алгоритму QZ (который вы должны использовать в коде Matlab, например, поскольку Cholesky не поддерживается), не номинируйте способ, которым Matlab делает для [V, lam] = eig (C). EX: [V, lam] = eig (C, eye (размер (C)), 'qz');

Из документации http://www.mathworks.com/help/ techdoc / ref / eig.html

Примечание. Для eig (A) собственные векторы масштабируются так, чтобы каждая из них составляла 1,0. Для eig (A, B), eig (A, «nobalance») и eig (A, B, флаг) собственные векторы не нормированы. Также заметим, что если A симметрично, eig (A, 'nobalance') игнорирует опцию nobalance, так как A уже сбалансирован.

Для [V, lam] = eig (C); собственные векторы масштабируются так, чтобы каждая из них составляла 1,0. Вот что нам нужно здесь. Матлаб делает это для формулировки Холецкого, так, как можно изменить нормальные собственные векторы, создаваемые QZ, чтобы они имели такой же масштаб? Так же:

W = V;
for i = 1:size(V,2) % for each column
    V(:,i) = V(:,i) / norm(V(:,i), 2);  % Normalize column i
end

Это найдет длину каждого вектора и разделит элементы на эту длину, чтобы масштабировать вектор. Mathamatica в основном делает то же самое, делая последний элемент 1 вместо нормализации вектора. http://www.fundza.com/vectors/normalize/

Обратите внимание, что векторы и значения не находятся в одном порядке, поэтому вам все равно придется сортировать их , Алгоритм Matlab Cholesky создает элементы в порядке сортировки следующим образом:

lam=diag(lam);
[sorted_lam,index]=sort(lam);
for cont=1:length(sorted_lam)
   sorted_V(:,cont)=V(:,index(cont));
end
W=sorted_W;
lam = diag(sorted_lam);

И даже после этого знаки могут не указываться в одном направлении (собственные векторы по-прежнему являются собственными векторами, если они умножаются - 1). Обратите внимание, что одна и та же сортировка должна применяться к лямбда (собственные значения), или они будут не в порядке.

Типичным условием является очистка знаков столбца, если первый элемент в столбце отрицательный.

Одна вещь, которую вы могли бы сделать, это перевернуть знаки, если более 2 отрицательных:

%FLIP SIGNS IF MORE THAN 2 ARE NEGATIVE
W=sorted_W;
for i = 1:size(W,2) % for each column in V
    A = W(:,i);
    s=sign(A);
    inegatif=sum(s(:)==-1);
    if(inegatif>1)
        W(:,i) = -W(:,i);
    end
end

Но это только реально помогает, если элементы не близки к 0, потому что если они близки к 0, другой алгоритм может найти значение на другой стороне 0, но это лучше, чем ничего.

. Последняя вещь для значения «B» (матрица ввода обобщенной матрицы собственных значений ), Я использую «eye (size (C))». Существует ли оптимальный способ выбора «B», чтобы улучшить этот алгоритм и дать ему ответы ближе к тем из Cholesky или быть более точным? Вы можете использовать любую (реальную матрицу такого же размера), что и B, включая A снова, или A '(A - входная матрица), но что такое «хороший выбор»? возможно, A ', я заметил для некоторых входов 3x3 из -1, похоже, близко к тем же ответам, что и «chol»?

https://www.mathworks.com/help/matlab /ref/eig.html?searchHighlight=eig&s_tid=doc_srchtitle#inputarg_B

19
задан JamesEggers 10 December 2008 в 20:38
поделиться

7 ответов

var cfg = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(@"/");
cfg.ConnectionStrings.ConnectionStrings.Add(new ConnectionStringSettings(params));

cfg.Save();

Рекомендоваться это заставит Ваш веб-сайт перерабатывать, так как он изменяет файл конфигурации. Выезд http://msdn.microsoft.com/en-us/library/4c2kcht0 (По сравнению с 80) .aspx

11
ответ дан 30 November 2019 в 02:20
поделиться

Только для указания, кто бы ни дал Вам "требование к защите", что Вы не можете поместить строку подключения в web.config, - идиот. К web.config никогда не может получать доступ ничто кроме Вашего доступа к приложению или удаленного доступа к серверу.

Это полностью походит на проблему требований и должно быть решено там.

10
ответ дан 30 November 2019 в 02:20
поделиться

При попытке отредактировать строки подключения в своем web.config во времени выполнения, смотрят на WebConfigurationManager.

, Если Вы просто пытаетесь изменить конфигурацию во времени выполнения для введения строки подключения затем, Вам не повезло. Дерево объектов ConfigurationManager предназначено, чтобы быть прямым отражением конфигурационных файлов, если бы Вы смогли изменить это, то состояние затем было бы непоследовательно.

я рекомендовал бы создать простой класс фасада, который Вы могли использовать для получения строк подключения. Таким образом, у Вас мог быть возврат фасада строка подключения от Вашего динамического набора или если Вы не существуете затем, это могло бы захватить его от ConfigurationManager.

class ConnectionStringProvider
{
    Dictionary<string, System.Configuration.ConnectionStringSettings> _localStrings = new Dictionary<string, System.Configuration.ConnectionStringSettings>();

    public void AddLocalConnectionString(string name, string connstring)
    {
        System.Configuration.ConnectionStringSettings cs = new System.Configuration.ConnectionStringSettings(name, connstring);
        _localStrings.Add(name, cs);
    }

    public void RemoveLocalConnectionString(string name)
    {
        _localStrings.Remove(name);
    }

    public System.Configuration.ConnectionStringSettings this[string name] {
        get 
        { 
            return _localStrings.ContainsKey(name) ? _localStrings[name] : System.Configuration.ConfigurationManager.ConnectionStrings[name]; 
        }
    }
}

Или Вы могли всегда идти вполне немного более тяжелые и использовать что-то как Блок Конфигурации Библиотеки Предприятия.

4
ответ дан 30 November 2019 в 02:20
поделиться

Еще не попробовали его, но возможно можно ли изменить значение существующей строки подключения во времени выполнения? Например, вместо:

ConfigurationManager.ConnectionStrings.Add(new ConnectionStringSettings(params));

, Возможно, Вы могли сделать что-то как:

ConfigurationManager.ConnectionStrings["myconnection"].ConnectionString = "something";

Если так, Вы могли указать строку подключения "переменные" в конфигурации, но установить их на ложные или пустые строки подключения:

<add name="myconnection" connectionString="SET AT RUNTIME" ... />
1
ответ дан 30 November 2019 в 02:20
поделиться

Очень устойчивое шифрование поддержки инфраструктуры конфигурации через Windows DataProtection API, который использует машину определенный ключ для шифрования разделов конфигурации. Таким образом, не было бы возможно считать зашифрованные данные где угодно, но на машине, где это было зашифровано.

Это - тот же API, который используется для правительства совместимое шифрование диска/папки в Windows. Это противостояло бы Вашим требованиям к защите компаний?

Или вручную или посредством Вашей автоматизации развертывания можно выполнить эту команду для шифрования connectionStrings раздела web.config для определенного веб-приложения.

aspnet_regiis -pe "connectionStrings" -app "/MyCoolWebApplication" -prov "DataProtectionConfigurationProvider"
1
ответ дан 30 November 2019 в 02:20
поделиться

При использовании MS SQL, можно настроить Вас веб-сервер для доступа к SQL Server через аутентификацию Windows, таким образом, у Вас никогда не должно быть паролей вообще в Вашем webconfig, или даже плавающий вокруг в Вашей памяти приложения.

1
ответ дан 30 November 2019 в 02:20
поделиться

Нет, Вы не можете изменить файл конфигурации во времени выполнения, он не предназначается для этого. Возможно, Вы могли использовать Конфигурацию Библиотек Предприятия, чтобы сделать это.

0
ответ дан 30 November 2019 в 02:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: